1.题目
写一个 SQL 语句,要求获取在 2020 年 2 月份下单的数量不少于 100 的产品的名字和数目。
返回结果表单的顺序无要求。
查询结果格式, 如下例所示:
2020 年 2 月份下单 product_id = 1 的产品的数目总和为 (60 + 70) = 130 。
2020 年 2 月份下单 product_id = 2 的产品的数目总和为 80 。
2020 年 2 月份下单 product_id = 3 的产品的数目总和为 (2 + 3) = 5 。
2020 年 2 月份 product_id = 4 的产品并没有下单。
2020 年 2 月份下单 product_id = 5 的产品的数目总和为 (50 + 50) = 100 。
2.思路和答案
首先要根据 Orders 的 product_id 或者 Products 表的 product_name 来分组查询,再求 unit 的和,因为一个产品在当月会发生多次下单。
接着 order_date 取值区间为2月,可以写成 order_date BETWEEN "2020-02-01" AND "2020-02-29",注意 BETWEEN 右边取值范围要 -1,比如 BETWEEN 1 AND 5 只能取值 1,2,3,4,取不到5。这里也可以换另一种写法:WHERE order_date LIKE "2020-02-%"。
最后再HAVING,把 unit >= 100 的过滤出来。注意这里为什么不能将 放到 WHERE 后面或者直接在最后一行再加个 WHERE?
是因为 HAVING 主要用于分组后的条件过滤,未分组的用 WHERE ,如果用了 GROUP BY 那么后面的过滤条件就不能再用 WHERE 了,要用 HAVING。
# Write your MySQL query statement below
SELECT product_name, SUM(unit) AS unit
FROM Products INNER JOIN Orders
ON Products.product_id=Orders.product_id
WHERE order_date BETWEEN "2020-02-01" AND "2020-02-29"
GROUP BY product_name
HAVING SUM(unit) >= 100
3.结果