📚 目录

  1. 概述
  2. 基本语法
  3. 使用聚合函数
  4. 按多个列分组
  5. 使用 HAVING 子句
  6. 结合 ORDER BY 使用
  7. 参考资料

🛠️ 概述

GROUP BY 语句用于将查询结果集中的数据行分组,并根据某一列或多列的值进行聚合操作。通常,GROUP BY 与聚合函数(如 COUNTSUMAVGMAXMIN 等)一起使用,以便对每个组进行计算。


📝 基本语法

GROUP BY 语句的基本语法如下:

SELECT column1, column2, ..., aggregate_function(column)
FROM table_name
GROUP BY column1, column2, ...;

  • column1, column2, ...:你希望分组的列。
  • aggregate_function(column):用于对每个组进行聚合操作的函数(如 COUNTSUMAVG 等)。
  • table_name:要查询的表名。

🔢 使用聚合函数

常见的聚合函数包括:

  • COUNT:计算行数。
  • SUM:计算总和。
  • AVG:计算平均值。
  • MAX:计算最大值。
  • MIN:计算最小值。

示例(计算每个部门的员工数量):

SELECT department, COUNT(*)
FROM employees
GROUP BY department;

该查询将返回每个部门的员工数量。

示例(计算每个部门的总薪资):

SELECT department, SUM(salary)
FROM employees
GROUP BY department;

该查询将返回每个部门的薪资总和。


🔢 按多个列分组

你可以使用多个列进行分组。多个列的分组可以帮助你对数据进行更细粒度的汇总。

示例(按部门和职位分组,计算每个组的员工数量):

SELECT department, position, COUNT(*)
FROM employees
GROUP BY department, position;

该查询将返回每个部门和职位的员工数量。


🧑‍💻 使用 HAVING 子句

HAVING 子句用于过滤 GROUP BY 分组后的结果。与 WHERE 不同,WHERE 子句在分组之前过滤行,而 HAVING 用于在分组后过滤结果。

示例(筛选出员工数量超过 10 人的部门):

SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

该查询将返回员工数量超过 10 的部门。


🔢 结合 ORDER BY 使用

你可以结合 ORDER BY 子句对分组结果进行排序。

示例(按部门的总薪资从高到低排序):

SELECT department, SUM(salary)
FROM employees
GROUP BY department
ORDER BY SUM(salary) DESC;

该查询将按每个部门的薪资总和降序排序。


📘 参考资料