HAVING 用法

在 MySQL 中,HAVING 子句用于对聚合函数的结果进行过滤。它通常与 GROUP BY 子句一起使用,以过滤分组后的数据。与 WHERE 子句不同,WHERE 用于在分组之前过滤记录,而 HAVING 用于在分组之后过滤分组结果。

基本语法

1
2
3
4
5
SELECT column1, column2, aggregate_function(column3)
FROM table_name
WHERE condition
GROUP BY column1, column2
HAVING aggregate_condition;
  • aggregate_condition:这是一个条件,用于过滤聚合函数的结果(如 SUMCOUNTAVG 等)。

示例

假设我们有一个表 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
  1. 使用 HAVING 过滤聚合结果

    我们想要找出总销售额(amount)大于 300 的类别。可以使用 GROUP BY 对数据进行分组,然后使用 HAVING 过滤分组结果:

    1
    2
    3
    4
    SELECT category, SUM(amount) AS total_sales
    FROM sales
    GROUP BY category
    HAVING SUM(amount) > 300;

    结果

category total_sales
Electronics 300
Furniture 400
  1. 结合 WHEREHAVING

    WHERE 子句可以用于在分组之前过滤记录。例如,假设我们只想考虑销售额大于 100 的记录,然后再按类别分组并过滤:

    1
    2
    3
    4
    5
    SELECT 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 子句中使用多个条件,使用 ANDOR 进行逻辑连接。
  • HAVING 子句中可以使用任何有效的 SQL 表达式,包括聚合函数和其他计算。