博客
关于我
带你学MySQL系列 | 困扰MySQL初学者的分组聚合查询,我终于讲明白了!
阅读量:80 次
发布时间:2019-02-26

本文共 1779 字,大约阅读时间需要 5 分钟。

分组查询的原理与实践

1. 分组查询的原理图

在进行分组查询时,通常会使用 group by 关键字。例如,按照 DEPARTMENT_ID 分组统计 SALARY 的平均值时,SQL 语句可以写成:

select department_id, avg(salary) from test group by department_id;

这意味着 group by 关键字会将 DEPARTMENT_ID 相同的记录分组在一起,然后对每个组内的 SALARY 进行平均值计算。如果没有指定具体的聚合函数,默认会对所有列进行聚合(通常是 SUM)。

2. group by 关键字的语法详解

group by 是用于分组查询的关键字,常用于与聚合函数(如 SUMAVGCOUNT 等)配合使用。它的作用是将数据按指定字段进行分组。

注意事项:

  • select 列表中,只能出现 group by 关键字后面的字段。
  • 如果需要对多个字段进行分组,可以在 group by 后面用逗号分隔多个字段。
  • group by 后面的字段可以是数字段,也可以是字符串字段,具体取决于数据库类型。

示例:

select deptno, avg(sal) as avgs from emp group by deptno;

3. 分组查询案例

案例1:按部门编号分组,统计每个部门的平均工资

select deptno, avg(sal) as avgs from emp group by deptno;

案例2:按部门编号和职位分组,统计每个部门每个职位的平均工资

select deptno, job_title, avg(sal) as avgs from emp group by deptno, job_title;

4. 分组前和分组后的筛选

在实际应用中,通常需要结合 WHEREHAVING 两种筛选方式。

分组前筛选:

使用 WHERE 子句对原始数据进行筛选,然后再进行分组查询。

select deptno, avg(sal) as avgs from empwhere deptno = '10' group by deptno;

分组后筛选:

如果需要在分组后再对结果集进行筛选,可以使用 HAVING 子句。

select deptno, avg(sal) as avgs from empgroup by deptnohaving avg(sal) > 2000;

示例:

如果需要同时使用分组前和分组后的筛选,可以结合使用。

select deptno, count(*) as emp_count from empwhere year(hire_date) = '1981'group by deptnohaving count(*) > 3;

5. 按员工姓名长度分组

select length(ename) as len, count(*) as counts from empgroup by lenhaving counts > 3;

6. 按多个字段分组

select deptno, job_title, avg(sal) as avgs from empgroup by deptno, job_title;

7. group byorder by 的结合

示例1:按平均工资降序排序

select deptno, avg(sal) as avgs from empgroup by deptnoorder by avgs desc;

示例2:按平均工资升序排序

select deptno, avg(sal) as avgs from empgroup by deptnoorder by avgs asc;

8. 分组查询的总结

  • 分组函数作为条件时,必须放在 HAVING 子句中。
  • 在需要的时候,可以使用 WHERE 子句进行分组前的筛选,这对于性能优化很重要。
  • GROUP BY 支持单个字段分组、多个字段分组以及基于函数的分组。

通过以上方法,可以灵活地进行分组查询,满足不同场景下的需求。如果需要更深入的学习,可以关注数据分析与统计学的相关内容,或者加入相关的微信公众号,获取更多实用的学习资源。

转载地址:http://ntzz.baihongyu.com/

你可能感兴趣的文章
Python基础语法:条件和分支
查看>>
Python基础语法:基本数据类型(数字类型和布尔类型)
查看>>
Python基础语法:基本数据类型(列表)
查看>>
Python基础语法:内置函数
查看>>
Python基础语法:你不得不知的几种变量类型
查看>>
Python基础语法教程,零基础入门到精通,看完这一篇就够了
查看>>
Python基础语法与执行脚本的3种方式
查看>>
python基础语法
查看>>
python基础语法
查看>>
python系列【仅供参考】:python测试开发基础---multiprocessing.Pool
查看>>
Python基础综合练习
查看>>
Python基础练习之一输出10000以内的阿姆斯特朗数
查看>>
Python基础系列讲解—动态类型语言的特点
查看>>
python基础系列四:字符串,列表,字典,元组之间的转换
查看>>
python基础篇(9):模块
查看>>
python基础篇(8):异常处理
查看>>
python基础篇(8):字符串常用处理汇总
查看>>
python基础篇(7):函数进阶知识点
查看>>
python基础篇(6):global关键字
查看>>
python基础篇(5):None类型
查看>>