Leetcode-Mysql题目及知识点总结(1084.销售分析III)

计算机小白QAQ,因为想找数分岗暑期实习所以充了会员想集中刷一下leetcode的mysql部分。写这个系列博文和大家们交流一下,后面也会持续更新面经准备的一些问题,欢迎同好们一起交流,求大佬轻喷QAQ。因为自己初学也走了很多弯路,所以会尽量写得详细一点,如果可以帮助到后来的朋友们,请各位留言鼓励一下哈哈哈哈。

1084.销售分析III

说实话这个题我一开始也没看懂啥意思。。。感觉写代码时间长了语文水平都下降了,实际上这个题说的意思是找到哪些商品只在春季销售,不能在其他月份销售由此想到三个思路。

思路1:按照商品的id分组,最早的销售日期不能早于2019-01-01,最晚的销售日期不能晚于2019-03-31.

思路2:在指定范围内的产品的销售数量与整个销售记录中的销售数量保持一致,即可说明该产品只在指定的日期范围内销售。

思路3:找到那些销售记录显示曾经在非指定日期范围内出售的商品的id,然后在所有销售记录中找到不在这个商品id范围内的商品id(感觉像绕口令,但是逻辑应该没问题)

知识点:groupby分组和窗口函数max、min、sum、count等,注意两个窗口函数是可以比较的,就像第二段代码中sum的条件计数和count是可以相比较的。表示日期在不在某一段范围内可以用这样的格式:日期 between 指定日期起始 and指定日期结尾

代码:

select sales.product_id,product_name

from sales

left join Product on sales.product_id=Product.product_id

group by product_id

having min(sale_date)>='2019-01-01' and max(sale_date)<='2019-03-31'

 

select sales.product_id,product_name

from sales

left join Product on sales.product_id=Product.product_id

group by product_id

having sum(sale_date>='2019-01-01' and sale_date<='2019-03-31')=count(*)

 

select distinct sales.product_id,product_name

from sales

left join Product on sales.product_id=Product.product_id

where sales.product_id not in (select product_id from Sales where sale_date not between '2019-01-01' and '2019-03-31')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值