首页 > 其他分享 >1084-销售分析 Ⅲ

1084-销售分析 Ⅲ

时间:2023-07-11 15:33:07浏览次数:35  
标签:分析 product 1084 销售 01 2019 sa id

销售分析 Ⅲ

原文地址:1084. 销售分析III - 力扣(LeetCode)

  • 题目如下所示

个人题解

这题简单也简单,不简单也不简单。个人的思考过程如下列 SQL 所示

  • -- 1. 建表
    CREATE TABLE 1084_Product(
    	product_id INT, -- 产品id
    	product_name VARCHAR(20), -- 产品名称
    	unit_price INT, -- 产品价格
    	PRIMARY KEY(product_id)
    );
    
    CREATE TABLE 1084_Sales(
    	seller_id INT,
    	product_id INT,
    	buyer_id INT,
    	sale_date DATE,
    	quantity INT,
    	price INT,
    	FOREIGN KEY(product_id) REFERENCES 1084_Product(product_id)
    );
    -- PS:这个表没有主键,**有重复的行**
      -- 2. 编写一个 SQL 查询,报告 2019年春季 才出售的产品。仅在 2019-01-01 至 2019-03-31 之间出售的商品
    
      -- PS:2019年春季才出售的产品的限制是,不能在其他时间段也出售
    
      SELECT sa.product_id FROM 1084_Sales sa WHERE sa.sale_date BETWEEN '2019-01-01' AND '2019-03-31';
    
      SELECT p.product_id, p.product_name FROM 1084_Product p LEFT JOIN 1084_Sales sa ON p.product_id = sa.product_id WHERE sa.sale_date BETWEEN '2019-01-01' AND '2019-03-31';
    
      -- 上面的 SQL 是错的,没办法保证同一个产品不会在另一个时间段也出售
    
      -- 怎么解决呢?
    
      -- 很简单,之前也碰到过一道类似的题目,只要使用 NOT IN,查找在春季之外还有销售的 产品 id 即可
    
      SELECT sa.product_id FROM 1084_Sales sa WHERE sa.sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31';
    
      SELECT p.product_id, p.product_name from 1084_Product p WHERE p.product_id NOT IN (SELECT sa.product_id FROM 1084_Sales sa WHERE sa.sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31');
    
      -- 	Wow Wow Wow,去官网提交了,发现还有一个问题我这个 SQL 并没有解决
    
      -- 那就是:如果在 Sales 表中没有数据的如何处理?(因为在 Sales 表中没有数据,那么它肯定不是在春季限量销售的产品!!)
    
      -- 所以上述子查询还有一点点缺陷,必须保证当前产品存在于 Sales 表
    
      SELECT p.product_id, p.product_name from 1084_Product p WHERE p.product_id NOT IN (SELECT sa.product_id FROM 1084_Sales sa WHERE sa.sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31') AND p.product_id IN (SELECT sa.product_id FROM 1084_Sales sa);
    
      -- 在官网的众多题解当中,发现可以使用 GROUP BY 和 min max 的方法来解决这题,感觉像是进城了一样,如下所示
    
      SELECT sa.product_id FROM 1084_Sales sa GROUP BY sa.product_id HAVING MIN(sa.sale_date) >= '2019-01-01' AND MAX(sa.sale_date) <= '2019-03-31';
    
      SELECT p.product_id, p.product_name FROM 1084_Product p WHERE p.product_id IN (SELECT sa.product_id FROM 1084_Sales sa GROUP BY sa.product_id HAVING MIN(sa.sale_date) >= '2019-01-01' AND MAX(sa.sale_date) <= '2019-03-31');
    
      -- 或者外连接
    
      SELECT p.product_id, p.product_name FROM 1084_Product p LEFT JOIN 1084_Sales sa ON p.product_id = sa.product_id GROUP BY p.product_id HAVING MIN(sa.sale_date) >= '2019-01-01' AND MAX(sa.sale_date) <= '2019-03-31';
    
      -- 亦或者 where 连接
    
      SELECT p.product_id, p.product_name FROM 1084_Product p, 1084_Sales sa WHERE p.product_id = sa.product_id GROUP BY p.product_id HAVING MIN(sa.sale_date) >= '2019-01-01' AND MAX(sa.sale_date) <= '2019-03-31';
    
    

标签:分析,product,1084,销售,01,2019,sa,id
From: https://www.cnblogs.com/OnlyOnYourself-lzw/p/17544843.html

相关文章

  • 511-游戏玩法分析 I
    游戏玩法分析I原文地址:511.游戏玩法分析I-力扣(LeetCode)题目如下所示个人题解很简单,这里不做过多解释,以下是个人的思考过程--1.建表CREATETABLE511_Activity( player_idINTNOTNULL, device_idINTNOTNULL, event_dateDATENOTNULL, games_played......
  • core文件及分析
    在工作中如果遇到数据库宕机,根据已知日志无法定位出具体原因可以分析core文件。快速安装gdbsudoyum-yinstallgdb如果数据库服务异常中断可按照以下步骤排查:①查询数据库日志,排查错误。②查询机器重启记录,看是否被重启。(lastreboot)③在达梦数据库bin目录下查看core文......
  • frida hook工具使用——用于os api注入分析还是不错的
    准备:pipinstallfridapipinstallfrida-tools 开始:1、创建child-gating1.pyimportosimportthreadingfromfrida_tools.applicationimportReactorimportfridaimportargparseclassApplication:def__init__(self,log_location):self.fpat......
  • 基于PCA主成分分析的BP神经网络回归预测MATLAB代码 代码注释清楚。
    基于PCA主成分分析的BP神经网络回归预测MATLAB代码代码注释清楚。先对数据集进行主成分分析,自主根据贡献率选择主成分;同时计算KMO验证值;用PCA以后数据进行BP神经网络回归预测。可以读取EXCEL数据,使用换自己数据集。很方便,初学者容易上手。YID:9545655001521325......
  • 线程阻塞案例分析
    线程阻塞案例分析一.Jstack打印快照1.jmeter运行压测脚本2.用jstack打印快照,下载到本地jstack112759>log1.txtjstack112759>log2.txtjstack112759>log3.txt3.在本地搜索是否有blocked关键字二.分析代码1.下载源码文件cn.testfan.perf.beihe.pinter.http.Cas......
  • 死锁问题定位与分析
    死锁问题定位与分析一.环境搭建1.准备脚本,执行压测2.用jstack打印日志jstack112759>dead.log3.下载日志到本地szdead.log二.问题定位1.打开dead.log搜索deadlock2.查看死锁的线程3.查看死锁位置三.问题分析1.下载死锁的类文件SzCaseController.class2.使用......
  • JVM常用工具分析
    JVM基础分析、故障解决工具常用jdk工具jps:JvmProcessStatusTool显示系统内全部的虚拟机进程;jstat:JvmStatisticsMonitoringTool动态收集指定进程运行时数据;jinfo:ConfigurationInfoForJava实时显示或调整虚拟机的配置信息;jmap:MemoryMapForJava生......
  • 【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析
    前言在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问题并进行优化。Locust在内存中维护了一个时间序列数据结构,用于存储每个事件的统计信息。这个数据结构允许我们在Charts标签页中查看不同时间点的性能指标,但是正因为LocustWebUI上展示的数据实际上是存储......
  • 2023年Q2空调行业销售数据分析(京东商品数据)
    随着夏季的来临,高温天气也带动部分家电行业的销售,以空调为代表的家电市场正逐步恢复活力。结合鲸参谋电商数据分析平台的相关数据,我们来分析一下2023年Q2空调市场的具体销售表现。根据鲸参谋平台的数据显示,2023年4-6月份,京东平台空调的销量累计将近520万件,环比增长129%,但同比去年下......
  • matlab:双或三方演化博弈,lotka-Volterra 1.双方演化博弈:代分析稳定点分析,代绘制相位图
    matlab:双或三方演化博弈,lotka-Volterra1.双方演化博弈:代分析稳定点分析,代绘制相位图,matlab仿真图代码2.三方演化博弈:代分析稳定点分析,代绘制相位图,matlab仿真图代码3.lotka-Volterra模型YID:7350644023709252......