当前位置: 首页 > news >正文

MySQL GROUP BY 语句详细说明

目录

MySQL GROUP BY 语句详细说明

1. 基本语法

2. 核心功能

(1) 单列分组

(2) 多列分组

3. 与聚合函数结合

4. HAVING 子句

5. 特殊用法

(1) 按表达式分组

(2) 与 WITH ROLLUP 结合

6. 注意事项

7. 典型应用场景


MySQL GROUP BY 语句详细说明

GROUP BY 是 SQL 中用于对查询结果进行分组的核心语句,通常与聚合函数配合使用,实现数据的分组统计和分析。


1. 基本语法
SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;

  • GROUP BY:指定分组的列
  • 聚合函数:如 COUNT(), SUM(), AVG(), MAX(), MIN()
  • 执行顺序WHEREGROUP BYSELECT

2. 核心功能
(1) 单列分组

统计每个部门的员工数量:

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

结果示例:

departmentemployee_count
HR5
IT8
Finance6
(2) 多列分组

统计每个部门+职级的平均工资:

SELECT department, job_level, AVG(salary) AS avg_salary
FROM employees
GROUP BY department, job_level;


3. 与聚合函数结合
函数作用示例
COUNT()统计行数COUNT(employee_id)
SUM()求和SUM(sales_amount)
AVG()求平均值AVG(age)
MAX()/MIN最大/最小值MAX(salary)

4. HAVING 子句

用于过滤分组后的结果(注意与WHERE区别):

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 10000;  -- 筛选平均工资>1万的部门

  • WHERE:在分组前过滤行
  • HAVING:在分组后过滤组

5. 特殊用法
(1) 按表达式分组

按年份统计订单量:

SELECT YEAR(order_date), COUNT(*)
FROM orders
GROUP BY YEAR(order_date);

(2) 与 WITH ROLLUP 结合

生成分组小计(需 MySQL 8.0+):

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

结果包含:

  • 每个 (department, job_level) 的薪资和
  • 每个 department 的小计
  • 最终总计

6. 注意事项
  1. SELECT 列限制

    • GROUP BY 后的列必须出现在 SELECT 中
    • 非聚合列必须包含在 GROUP BY
    -- 错误示例(name 未参与分组)
    SELECT name, department, AVG(salary) 
    FROM employees 
    GROUP BY department;
    

  2. 索引优化

    • GROUP BY 列建立索引可加速分组
    • 避免对大文本列分组
  3. NULL 值处理

    • 所有 NULL 值会被分到同一组

7. 典型应用场景
  1. 统计报表(如月度销售总额)
  2. 数据去重统计
  3. 多维度数据分析(部门+职级+年龄段的薪资分布)
  4. 漏斗分析(用户行为步骤转化率)

通过合理使用 GROUP BY,可显著提升复杂数据统计的效率和准确性。实际应用中建议结合 EXPLAIN 分析查询性能。

http://www.dtcms.com/a/319465.html

相关文章:

  • 什么是负载均衡,有哪些常见算法?
  • 计算机硬件组成原理
  • 复合机器人破局之路:如何逆袭突围
  • day 48 模型的可视化与推理
  • Spring Cloud 项目注册 Nacos 时设置真实 IP 的多种方式【多网卡/虚拟机实用指南】
  • 电子设计项目/复刻入门指南(从0到1的蜕变)--(持续更新...)(附完整项目举例)
  • 阿里云OSS vs 腾讯云COS深度对比:如何为网站静态资源选择最佳对象存储?
  • vue2+elementui select框可以选择可以回车添加新的option
  • CD61.【C++ Dev】多态(1)
  • 腾讯云EdgeOne产品深度分析报告
  • Docker入门教程:在腾讯云轻量服务器上部署你的第一个容器化应用 (2025)
  • 基于Matlab图像处理的黄豆自动计数系统设计与实现
  • 【数据结构入门】双向链表
  • Windows中安装rustup-init.exe以及cargo build报错443
  • ENSP 中静态路由负载分担
  • linux开发之mmap内存映射
  • 算法解决爬楼梯问题
  • SQL注入攻击基础
  • 【LVGL自学笔记暂存】
  • 如何正确选择建站工具?
  • FPGA高端项目:图像采集+Aurora 8B10B+UDP图传架构,基于GTP高速收发器的光口转网口,提供4套工程源码和技术支持
  • 旧物回收小程序系统开发:连接你我,共筑环保梦想
  • Linux下动态库链接的详细过程
  • 【网络运维】Linux:NFS服务器原理及配置
  • Kafka数据生产和发送
  • RuoYi OpenAPI集成从单体到微服务改造全过程记录
  • 高速公路安装定向广播的优势
  • centos VMware ESXi 扩容
  • 为什么任务顺序会影响效率?如何实现自定义顺序?
  • Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”