SQL分组查询
在SQL中,分组查询是一种强大的工具,允许我们根据某些列对数据进行分组,并对每个组应用聚合函数(如COUNT
、SUM
、AVG
等)。通过分组查询,我们可以从大量数据中提取有意义的汇总信息。
什么是分组查询?
分组查询的核心是GROUP BY
子句。它允许我们将数据按照一个或多个列进行分组,然后对每个组应用聚合函数。例如,我们可以计算每个部门的员工数量,或者统计每个产品的销售总额。
基本语法
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
column1
:用于分组的列。aggregate_function(column2)
:对每个组应用的聚合函数,如COUNT
、SUM
、AVG
等。
示例:统计每个部门的员工数量
假设我们有一个employees
表,其中包含以下数据:
id | name | department | salary |
---|---|---|---|
1 | Alice | HR | 50000 |
2 | Bob | IT | 60000 |
3 | Charlie | HR | 55000 |
4 | David | IT | 65000 |
5 | Eve | Finance | 70000 |
我们想要统计每个部门的员工数量。可以使用以下SQL查询:
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
输出结果
department | employee_count |
---|---|
HR | 2 |
IT | 2 |
Finance | 1 |
使用HAVING子句过滤分组结果
有时我们可能只想查看满足某些条件的分组。例如,我们只想查 看员工数量大于1的部门。这时可以使用HAVING
子句。
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 1;
输出结果
department | employee_count |
---|---|
HR | 2 |
IT | 2 |
备注
HAVING
子句与WHERE
子句的区别在于,WHERE
在分组前过滤行,而HAVING
在分组后过滤组。