2020 年 2 月下单不少于 100 件的产品
LeetCode 1327 · 日期过滤、分组求和、HAVING
面试怎么回答
过滤 2020 年 2 月的订单,按 product_id 分组 SUM(unit),HAVING SUM(unit) >= 100,再关联产品名。日期条件写成左闭右开区间,月底天数不用操心,也能走索引。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
题意
产品表和订单表(订单记录产品、日期和数量)。找出 2020 年 2 月总下单数量不少于 100 的产品名称和数量。
表结构
- Products:product_id(主键)、product_name、product_category
- Orders:product_id、order_date、unit;可能有重复行
思路
先限定 2 月的订单,按产品汇总数量,HAVING 过滤 ≥ 100,再关联产品名称。
参考解法
select product_name,sum(unit) unit
from Orders o left join Products p
on o.product_id=p.product_id
where date_format(order_date,'%Y-%m')='2020-02'
group by product_name
having unit>=100
易错点
- 日期用区间
order_date >= '2020-02-01' AND order_date < '2020-03-01',比 DATE_FORMAT 对列计算更利于索引,也避免闰年 2 月 29 日的边界问题。 - 按名称分组时同名产品会合并,按 product_id 分组更稳。