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

Mysql group by 用法

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

作用

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

1. 简单分组统计

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

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

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

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

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

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

解释

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

与 WHERE 和 HAVING 子句结合使用

1. 与 WHERE 子句结合

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

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 的部门:

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 子句中。例如:
    -- 错误示例
    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 子句,可以对数据库中的数据进行有效的分组统计和分析,从而提取出有价值的信息。

http://www.xdnf.cn/news/303247.html

相关文章:

  • ResNet50应用于农业保险现场照片作物种类核验
  • 【coze】故事卡片(图片、音频、文字)
  • 【漫话机器学习系列】242.欠拟合(Underfitting)
  • 端口隔离 实验 讲解
  • UE5 GAS开发P47 游戏标签
  • Kotlin 中 List 和 MutableList 的区别
  • 网络自动化与可观测性:构建自愈型智能网络体系
  • 什么是进程,如何管理进程
  • 【2025】Visio 2024安装教程保姆级一键安装教程(附安装包)
  • Java基础学完,继续深耕(0506)SQL--多表关系
  • Kotlin-访问权限控制
  • unittest自动化测试实战
  • 文件上传漏洞篇:upload-labs靶场搭建
  • 栈与队列详解及模拟实现
  • 未来 CSS:变量、容器查询与新特性的探索
  • 硬件工程师面试常见问题(16)
  • Deepseek流式操作与用户行为数据分析day01
  • 【Linux】基础开发工具
  • Flutter开发HarmonyOS实战-鸿蒙App商业项目
  • Mac电脑,idea突然文件都展示成了文本格式,导致ts,tsx文件都不能正常加载或提示异常,解决方案详细说明如下
  • Mathematica中的ResourceFunction
  • Oracle中游标和集合的定义查询及取值
  • 使用 git subtree 方法将六个项目合并到一个仓库并保留提交记录
  • Python Cookbook-7.4 对类和实例使用 cPickle 模块
  • 家庭宽带IP与IDC机房IP
  • 第100+40步 ChatGPT学习:R语言实现多轮建模
  • 用 Tailwind CSS 优化你的 Vue 3 项目! ! !
  • MySQL从入门到精通(一):MySQL介绍及数据库相关概念
  • 高级java每日一道面试题-2025年5月02日-基础篇[反射篇-编码]-使用反射,获取Class对象
  • WPF MVVM入门系列教程(五、命令和用户输入)