当前位置: 首页 > 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.lryc.cn/news/612943.html

相关文章:

  • 《算法导论》第 9 章 - 中位数和顺序统计量
  • NAS技术在县级融媒体中心的架构设计与安全运维浅析
  • 医疗AI中GPU部署的“非对等全节点架构“方案分析(下)
  • MHA架构实战
  • 【R语言】 高清美观的 MaxEnt 刀切图(Jackknife)绘制——提升论文质量
  • Docker离线安装MinIO及数据迁移
  • 【R语言】重新绘制高清MaxEnt的单因素响应曲线图像
  • 把 apipost 的 md 文档转化成 json数据
  • 【论文阅读】基于元模型的体系知识图谱构建
  • 遍历节点设备属性
  • mac中多版本JDK配置和切换
  • 机器学习算法篇(四)决策树算法
  • Qwen-Image开源模型实战
  • 使用萤石云播放视频及主题模版配置
  • VFTO与局部放电-高压设备绝缘系统的双重挑战与防护策略
  • Keil MDK-ARM V5.42a 完整安装教程
  • rk3588s vscode索引失败的问题
  • 12-netty基础-手写rpc-编解码-04
  • web前端结合Microsoft Office Online 在线预览,vue实现(PPT、Word、Excel、PDF等)
  • 表单元素与美化技巧:打造用户友好的交互体验
  • 【LVGL自学笔记暂存】
  • LINUX-批量文件管理及vim文件编辑器
  • VBA之Word应用第四章第一节:段落集合Paragraphs对象(一)
  • 11-netty基础-手写rpc-支持多序列化协议-03
  • 从零开始构建情绪可视化日记平台 - React + TypeScript + Vite
  • 芯谷科技--高效噪声降低解决方案压缩扩展器D5015
  • 30-Hive SQL-DML-Load加载数据
  • 微算法科技(NASDAQ:MLGO)利用集成学习方法,实现更低成本、更稳健的区块链虚拟货币交易价格预测
  • 51单片机
  • 数据推荐|标贝科技方言自然对话数据集 构建语音交互新基建