一、完整建表 SQLMySQL 语法CREATE TABLE Products ( product_id INT PRIMARY KEY, product_name VARCHAR(50), product_category VARCHAR(30) ); product_id 是该表主键(具有唯一值的列)。 该表包含该公司产品的数据。 CREATE TABLE Orders ( product_id INT, order_date DATE, unit INT ); 该表可能包含重复行。 product_id 是表单 Products 的外键reference 列。 unit 是在日期 order_date 内下单产品的数目。INSERT INTO Products(product_id, product_name, product_category) VALUES (1, Leetcode Solutions, Book), (2, Jewels of Stringology, Book), (3, HP, Laptop), (4, Lenovo, Laptop), (5, Leetcode Kit, T-shirt); INSERT INTO Orders(product_id, order_date, unit) VALUES (1, 2020-02-05, 60), (1, 2020-02-10, 70), (2, 2020-01-18, 30), (2, 2020-02-11, 80), (3, 2020-02-17, 2), (3, 2020-02-24, 3), (4, 2020-03-01, 20), (4, 2020-03-04, 30), (4, 2020-03-04, 60), (5, 2020-02-25, 50), (5, 2020-02-27, 50), (5, 2020-03-01, 50);二、需求写一个解决方案要求获取在 2020 年 2 月份下单的数量不少于 100 的产品的名字和数目。返回结果表单的顺序无要求。查询结果的格式如下。三、 思路与解题# Write your MySQL query statement below select p.product_name,SUM(o.unit) unit from Orders o join Products p on p.product_ido.product_id where date_format(o.order_date,%Y-%m)2020-02 group by o.product_id having SUM(o.unit)100逐行解析JOIN关联两张表通过product_id把产品名称和订单数量关联起来WHERE DATE_FORMAT(order_date, %Y‑%m) 2020‑02只选取 2020‑02 月份的订单补充也可以写成order_date BETWEEN 2020-02-01 AND 2020-02-29。GROUP BY p.product_id, p.product_name按产品分组MySQL 开启严格模式GROUP BY必须把非聚合字段放到分组条件里面SUM(o.unit)计算同一个商品 2 月份下单总数HAVING SUM(o.unit) 100分组之后过滤总和大于等于 100重点区分WHERE分组之前过滤行HAVING分组之后对聚合结果过滤这里必须用HAVING不能写在 WHERE 里面四、总结日期筛选两种写法DATE_FORMAT(order_date,%Y-%m) 2020-02order_date 2020-02-01 AND order_date 2020-03-01第二种写法索引可以生效生产环境优先选择第二种