Mysql group by 用法

GROUP BY 是 SQL 中一个非常重要的子句,主要用于结合聚合函数对数据进行分组统计和分析。下面为你详细介绍它的作用和用法。

作用

GROUP BY 子句的核心作用是将查询结果按照指定的列或表达式进行分组。分组后,数据库会将相同值的行归为一组,然后可以对每个组应用聚合函数,如 SUM()COUNT()AVG()MIN()MAX() 等,从而得到每个组的汇总信息。这样可以方便地对数据进行统计和分析,例如统计每个部门的员工数量、每个产品的销售总额等。

1. 简单分组统计

假设有一个 employees 表,包含 department_id(部门编号)和 salary(工资)两列,我们可以使用 GROUP BY 统计每个部门的员工数量:

sql 复制代码
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;
2. 结合其他聚合函数

同样使用 employees 表,我们可以统计每个部门的平均工资:

sql 复制代码
SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;
3. 按多个列分组

如果 employees 表还有 job_title(职位名称)列,我们可以按部门和职位分组,统计每个部门每个职位的员工数量:

sql 复制代码
SELECT department_id, job_title, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id, job_title;

解释

  • GROUP BY department_id, job_title:按照 department_idjob_title 两列进行分组,将 department_idjob_title 都相同的记录归为一组

WHEREHAVING 子句结合使用

1. 与 WHERE 子句结合

WHERE 子句用于在分组之前筛选记录。例如,我们只统计工资大于 5000 的员工所在部门的员工数量:

sql 复制代码
SELECT department_id, COUNT(*) AS employee_count
FROM employees
WHERE salary > 5000
GROUP BY department_id;
  • 解释
    • WHERE salary > 5000:在分组之前筛选出 salary 大于 5000 的记录,然后再进行分组统计。
2. 与 HAVING 子句结合

HAVING 子句用于在分组之后筛选分组结果。例如,我们只显示员工数量大于 10 的部门:

sql 复制代码
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
HAVING employee_count > 10;
  • 解释
    • HAVING employee_count > 10:在分组统计完成后,筛选出 employee_count 大于 10 的分组。

注意事项

  • SELECT 语句中,除了聚合函数,其他列必须出现在 GROUP BY 子句中。例如:

    sql 复制代码
    -- 错误示例
    SELECT department_id, salary
    FROM employees
    GROUP BY department_id;

    上述示例中,salary 列既不是聚合函数的参数,也不在 GROUP BY 子句中,会导致语法错误。

  • GROUP BY 子句通常在 WHERE 子句之后、ORDER BY 子句之前使用。其执行顺序一般为:FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

通过合理使用 GROUP BY 子句,可以对数据库中的数据进行有效的分组统计和分析,从而提取出有价值的信息。

相关推荐
苏渡苇41 分钟前
Redis 持久化——RDB 快照 vs AOF 日志
数据库·redis·缓存·redis持久化·aof vs rdb
l1t1 小时前
DeepSeek总结的使用 PEG 实现运行时可扩展的 SQL 解析器
数据库·sql
这个DBA有点耶1 小时前
COUNT进阶(续):超大表去重计数的极致优化
数据库·架构·代码规范
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第四篇:SAP 报表异常处理机制:数据校验与消息提示规范落地
开发语言·数据库·学习·算法·sap·abap
_1_71 小时前
SQL SERVER闪退问题解决
数据库·sqlserver
ZengLiangYi1 小时前
sql.js WASM 深度解析
javascript·数据库·后端
一 乐2 小时前
人口老龄化社区服务与管理平台|基于springboot+vue的人口老龄化社区服务与管理平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·人口老龄化社区服务与管理平台
梓䈑2 小时前
【MySQL】表的操作(数据表的创建、查看 和 修改)
数据库·mysql
小碗羊肉2 小时前
【Redis | 第六篇】Redisson
数据库·redis·缓存
诸葛务农3 小时前
共沸脱水技术及其在光刻胶用PGMEA纯化中的应用(中)
linux·数据库·人工智能