计算机小白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')