📅  最后修改于: 2023-12-03 15:15:28.862000             🧑  作者: Mango
在SQL中,有时需要对结果进行聚合以进行汇总。其中使用最多的是使用HAVING
子句和GROUP BY
子句。本文将讨论它们的区别和用法。
GROUP BY
子句用于将结果集按一个或多个列进行分组。语法如下:
SELECT column1, column2, ..., columnN
FROM table_name
GROUP BY column1, column2, ..., columnN;
例如,我们有一个名为employees
的表,其中包含以下列:employee_id
、first_name
、last_name
和salary
。我们想计算每个部门的平均工资,可以使用如下语句:
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
注意,只能在SELECT
语句中使用GROUP BY
子句,而不能在WHERE
子句或FROM
子句中使用。而且,SELECT
语句中必须出现GROUP BY
子句中所列出的所有列。
HAVING
子句用于对GROUP BY
分组后的结果集进行进一步限制。语法与WHERE
子句类似,但在HAVING
子句中可以使用聚合函数。
SELECT column1, column2, ..., columnN, aggregate_function(columnX)
FROM table_name
GROUP BY column1, column2, ..., columnN
HAVING aggregate_function(columnX) operator value;
例如,我们想筛选平均工资高于5000的部门,可以使用如下语句:
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;
HAVING
子句与WHERE
子句的区别在于前者用于筛选GROUP BY
分组后的结果集,而后者用于筛选原始数据表中的行。因此,HAVING
子句中可以使用SELECT
语句中所定义的别名(如上例中的AVG(salary)
),而WHERE
子句中不能使用。
GROUP BY
和HAVING
子句都用于聚合结果集,但GROUP BY
子句用于分组列,HAVING
子句用于限制分组后的结果集。记住GROUP BY
中必须列出所有需要分组的列,而HAVING
子句中可以使用聚合函数及别名。