HAVING 用法
HAVING 用法
在 MySQL 中,HAVING 子句用于对聚合函数的结果进行过滤。它通常与 GROUP BY 子句一起使用,以过滤分组后的数据。与 WHERE 子句不同,WHERE 用于在分组之前过滤记录,而 HAVING 用于在分组之后过滤分组结果。
基本语法
1 | SELECT column1, column2, aggregate_function(column3) |
- aggregate_condition:这是一个条件,用于过滤聚合函数的结果(如
SUM、COUNT、AVG等)。
示例
假设我们有一个表 sales,结构如下:
| id | product | category | amount |
|---|---|---|---|
| 1 | A | Electronics | 100 |
| 2 | B | Electronics | 200 |
| 3 | C | Furniture | 150 |
| 4 | D | Furniture | 250 |
| 5 | E | Clothing | 50 |
使用
HAVING过滤聚合结果我们想要找出总销售额(
amount)大于 300 的类别。可以使用GROUP BY对数据进行分组,然后使用HAVING过滤分组结果:1
2
3
4SELECT category, SUM(amount) AS total_sales
FROM sales
GROUP BY category
HAVING SUM(amount) > 300;结果:
| category | total_sales |
|---|---|
| Electronics | 300 |
| Furniture | 400 |
结合
WHERE和HAVINGWHERE子句可以用于在分组之前过滤记录。例如,假设我们只想考虑销售额大于 100 的记录,然后再按类别分组并过滤:1
2
3
4
5SELECT category, SUM(amount) AS total_sales
FROM sales
WHERE amount > 100
GROUP BY category
HAVING SUM(amount) > 300;结果:
| category | total_sales |
|---|---|
| Electronics | 200 |
| Furniture | 400 |
注意事项
HAVING子句必须跟随在GROUP BY子句之后,因为它用于过滤聚合后的结果。- 可以在
HAVING子句中使用多个条件,使用AND或OR进行逻辑连接。 HAVING子句中可以使用任何有效的 SQL 表达式,包括聚合函数和其他计算。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Zsh的树洞!
