题解 | #返回订单数量总和不小于100的所有订单的订单号#
返回订单数量总和不小于100的所有订单的订单号
https://www.nowcoder.com/practice/ff77e82b59544a15987324e19488aafd
select order_num from OrderItems group by order_num having sum(quantity) >=100 order by order_num
需要注意的是where 和 having 的使用场景:
where 是针对字段进行的筛选
having 是针对分组的筛选
具体的对比,from gpt
SQL 中having和where的主要区别有:
- 执行时间不同
where在分组group by之前进行过滤,having在group by之后进行过滤。
- 作用对象不同
where对原始表进行筛选,影响从表中选取数据的行。
having对group by的结果进行筛选,影响最终结果集的行。
- 使用条件不同
where后面可以使用表中的所有列,常用于不聚合的字段。
having只可使用group by生成的组字段或聚合函数,常用于聚合字段。
- 适用场景不同
- 如果需要在分组统计之前过滤记录,则需要where。
- 如果需要在分组统计之后基于聚合函数过滤,则需要having。
- 如果同时需要两者,则where写在前,having写在后。
一个简单的例子:
sqlCopy codeSELECT class, COUNT(student) FROM table WHERE score > 80 GROUP BY class HAVING COUNT(student) > 5
这可以查找总分大于80的学生人数超过5人的班级。
总之,where和having都用于过滤,但适用范围和使用时间不同。where先行过滤行,having后置过滤分组。