SQLite GROUP BY 子句
                           
天天向上
发布: 2025-03-04 08:44:19

原创
397 人浏览过

GROUP BY 子句用于将查询结果按照指定列进行分组。它常常与聚合函数一起使用,如 COUNT()SUM()AVG()MAX()MIN(),对每个分组的数据进行计算。通过 GROUP BY,你可以对每个组的数据进行汇总,并返回汇总后的结果。

基本语法

SELECT column_name(s), aggregate_function(column_name)
FROM table_name
WHERE condition
GROUP BY column_name;
  • column_name(s): 用于分组的列名。
  • aggregate_function: 聚合函数(如 COUNT(), SUM(), AVG() 等)。
  • table_name: 查询的表。
  • condition: 可选的查询条件。

1. 按单列分组

最常见的用法是通过单列来分组数据。聚合函数会对每个组进行计算,并返回每个分组的结果。

示例:

  • department 列分组,统计每个部门的员工数量:
  SELECT department, COUNT(*)
  FROM employees
  GROUP BY department;
  • 该查询会根据部门名称 (department) 对员工进行分组,并统计每个部门的员工数量。

2. 使用聚合函数

GROUP BY 子句通常与聚合函数结合使用,如 COUNT()SUM()AVG()MAX()MIN() 等,来计算每个分组的统计信息。

示例:

  • department 列分组,统计每个部门的总薪资:
  SELECT department, SUM(salary)
  FROM employees
  GROUP BY department;
  • 该查询返回每个部门的总薪资。
  • department 列分组,计算每个部门的平均薪资:
  SELECT department, AVG(salary)
  FROM employees
  GROUP BY department;
  • 该查询返回每个部门的平均薪资。

3. 按多列分组

GROUP BY 可以同时按多个列分组。多个列按顺序进行分组。

示例:

  • departmentjob_title 列分组,计算每个部门内每个职位的员工数量:
  SELECT department, job_title, COUNT(*)
  FROM employees
  GROUP BY department, job_title;
  • 该查询返回每个部门和职位的员工数量。

4. 使用 HAVING 过滤分组结果

HAVING 子句用于在分组后对结果进行筛选,类似于 WHERE 子句,但 WHERE 不能与聚合函数一起使用,而 HAVING 子句则是专门用于聚合结果的过滤。

示例:

  • department 分组,计算每个部门的平均薪资,并只返回平均薪资大于 5000 的部门:
  SELECT department, AVG(salary)
  FROM employees
  GROUP BY department
  HAVING AVG(salary) > 5000;
  • 该查询返回薪资平均值大于 5000 的部门及其平均薪资。

5. 排序分组结果

GROUP BYORDER BY 可以一起使用。GROUP BY 用于分组,ORDER BY 用于对分组后的结果进行排序。

示例:

  • department 列分组,计算每个部门的总薪资,按照总薪资降序排列:
  SELECT department, SUM(salary)
  FROM employees
  GROUP BY department
  ORDER BY SUM(salary) DESC;
  • 该查询返回按部门分组并按总薪资降序排列的结果。

6. 使用 GROUP BYDISTINCT

GROUP BY 会去除重复的行,因此可以与 DISTINCT 配合使用来进一步消除重复数据。

示例:

  • department 列分组,找出每个部门的唯一职位数量:
  SELECT department, COUNT(DISTINCT job_title)
  FROM employees
  GROUP BY department;
  • 该查询返回每个部门内不同职位的数量。

总结

  • GROUP BY 用于根据指定的列将结果集分组。
  • 聚合函数COUNT(), SUM(), AVG(), MAX(), MIN() 通常与 GROUP BY 一起使用,用于对每个分组的记录进行统计计算。
  • HAVING 用于过滤分组后的结果,常用于与聚合函数一起使用。
  • ORDER BY 可以与 GROUP BY 一起使用,按照聚合结果对分组进行排序。
  • 多列分组 可以根据多个列进行分组,按顺序处理每个列。

GROUP BY 是进行数据汇总和分析时非常重要的工具,尤其在需要生成汇总报告时非常有用。更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *