订阅更新

2020 年 2 月下单不少于 100 件的产品

SQL 实战 123 题 · 第 94 题 简单 约 2 分钟读完

LeetCode 1327 · 日期过滤、分组求和、HAVING

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

过滤 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 分组更稳。
刷题进度保存在当前浏览器