SQLite GROUP BY 子句
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 可以同时按多个列分组。多个列按顺序进行分组。
示例:
- 按
department和job_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 BY 和 ORDER BY 可以一起使用。GROUP BY 用于分组,ORDER BY 用于对分组后的结果进行排序。
示例:
- 按
department列分组,计算每个部门的总薪资,按照总薪资降序排列:
SELECT department, SUM(salary)
FROM employees
GROUP BY department
ORDER BY SUM(salary) DESC;
- 该查询返回按部门分组并按总薪资降序排列的结果。
6. 使用 GROUP BY 与 DISTINCT
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 是进行数据汇总和分析时非常重要的工具,尤其在需要生成汇总报告时非常有用。更多详细内容请关注其他相关文章。