【Leetcode】高频SQL基础题--1327.列出指定时间段内所有的下单产品
【Leetcode】高频SQL基础题–1327.列出指定时间段内所有的下单产品
要求:写一个解决方案,要求获取在 2020 年 2 月份下单的数量不少于 100 的产品的名字和数目。
返回结果表单的 顺序无要求 。
解题思路:
1、使用 内连接 ,确保只处理有有效产品信息的订单
2、用 WHERE 筛选出2020年2月的所有订单
3、然后 按产品ID、名字进行分组,用 HAVING过滤 出总数量达到100及以上的产品
4、最后输出产品名称和对应的总数量
注意:
1、当时有个疑问,为什么 GROUP BY p.product_id, p.product_name,不可以只按照 p.product_id 进行分组吗?
由于在标准的SQL语法中,SELECT语句中出现的所有非聚合列(没有使用SUM、COUNT等函数的列)必须出现在 GROUP BY子句中,或者这些列必须函数依赖于 GROUP BY中的列。
(也就是 需要显式地在 GROUP BY中列出 product_name ,虽然在实际业务逻辑中,product_name确实由 product_id唯一决定(函数依赖),但有些数据库系统无法自动识别这种函数依赖关系。所以按照p.product_id 进行分组 就会报错,要把p.product_name带上)
代码:
SELECTp.product_name,SUM(o.unit) as unit
FROM Products p
INNER JOIN Orders o
ON p.product_id=o.product_id
WHERE o.order_date >='2020-02-01' and o.order_date<'2020-03-01'
GROUP BY p.product_id, p.product_name
HAVING SUM(o.unit) >= 100;