MySQL初学者可以告别分组聚合查询的困扰了


当前第2页 返回上一页

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

这个知识点就是要带着大家理解一下,什么使用该用where筛选?什么时候该用having筛选?这个知识点对于学习MySQL的小白来说,也是一个棘手的事儿。不用担心,跟着黄同学学MySQL,没有学不会的。

1)原始表和结果集的概念

原始表指的是数据库中真正存在的那个表,使用【select * from 表名】查询出来的就是原始表信息。结果集指的是在SQL语句中,添加其它任何一个限制条件,最终展示给我们表,都是结果集。添加不同的限制条件,查询出来的结果集也是不同的。原始表只有一个,结果集却是各种各样的。

2)黄同学支大招

只要是需求中,涉及到聚合函数做条件的情况,一定是分组后的筛选。能用分组前筛选的,就优先考虑分组前的筛选。(考虑到性能问题)

 

3)案例讲解

原始数据集如下:

① 分组前筛选

习题一:查询姓名中包含S字符的,每个部门的工资之和。

习题二:查询工资大于2000的,不同部门的平均工资。

② 分组后筛选

习题一:查询部门员工个数大于3的部门编号和员工个数。

习题二:查询每个部门最高工资大于3000的部门编号和最高工资。

③ 分组前筛选和分组后筛选合用

习题:查询1981年入职的,不同部门间工资的平均值大于2000的部门编号和平均值。

5.分组查询(按函数分组)

习题:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>3的有哪些?

select length(ename) len,count(*) counts
from emp
group by len
having counts > 3;

结果如下:

6.分组查询(按多个字段分组)

习题:查询每个部门每个工种的员工的平均工资。

7.group by和order by,一对老搭档

习题一:查询每个部门的员工的平均工资,按照平均工资降序。

习题二:查询每个部门的员工的平均工资,按照平均工资升序。

8.分组查询的总结

1)分组函数做条件,肯定是放在having子句中。

2)能用分组前筛选的,就优先考虑使用分组前筛选。(where筛选)

3)group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),还支持函数分组(用的较少)。

以上就是MySQL初学者可以告别分组聚合查询的困扰了的详细内容,更多关于MySQL分组聚合查询的资料请关注其它相关文章!

更多相关Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

mysql求长度的函数是什么?

mysql适合数据仓库吗?

mysqldump数据库备份参数详解

删除mysql用户组的命令是什么?

怎么看mysql安装路径

一个单引号会引发mysql性能损失吗

mysql中语句执行的顺序以及查询处理阶段的分析

在activereports中如何使用mysql数据库

mysql数据库聚合查询和联合查询操作

php入门教程之使用mysqli操作数据库的方法(连接,查询,事务回滚等)

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...