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

 更新时间:2021年10月26日 14:22:57   作者:数据分析与统计学之美  
这篇文章主要为大家介绍了MySQL分组聚合查询的难点讲解,帮助MySQL初学着告别分组聚合查询的困扰,有需要的朋友可以借鉴参考下,希望能够有所进步

1.分组查询的原理图

在这里插入图片描述

对上述原始数据,按照DEPARTMENT_ID(员工id)分组统计SALARY(薪水)的平均值。

在这里插入图片描述

上述原理写成代码,应该怎么写呢?

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

可以清楚地看到,使用department_id进行分组后,系统默认将department_id相同的号所在的行,分配在一起,你有几个不同的department_id,就会分为几组,每个组中的数据行数,不一定都要相同。

当自动分配完成后,会根据你所写的分组函数,进行组内运算。

也就是说,你使用的是sum()函数,就会组内求和;当你使用的是avg()函数,就会组内求平均值;当你使用的是count()函数,就会进行组内计数;当你使用的是max()函数,就会进行组内求最大值;你使用的是min()函数,就会进行组内求最小值。

2.group by关键字语法详解

有些小白在学习MySQL的过程中,很多都是在group by关键字这个地方卡壳。于是我希望自己能够用白话图文的方式,让你真正搞明白这个关键字的含义。

在这里插入图片描述

group by是用于分组查询的关键字,一般是配合sum(),avg(),count(),max(),min()聚合函数使用的。也就是说SQL语句中只要有group by,那么在select后面的展示字段中一般会有聚合函数(5个聚合函数)中的一个或多个函数出现。观察上图,有一点你需要记住,你用表中的字段A进行分组后,一般就需要对表中的其它字段,使用聚合函数,这样意义更大,而不是还对字段A使用聚合函数,没啥太大意义。

我们再思考下面这个问题!

当SQL语句中使用了group by后,在select后面一定有一个字段使用了聚合函数(5个聚合函数)。但是除了这个聚合函数,select后面还可以添加其他什么字段吗?

答案肯定是可以的!但是该字段有一定的限制,并不是什么字段都可以。也就是说,当SQL语句中使用了group by关键字后,select后面除了聚合函数,就只能是group by后面出现的字段。也就是图中的字段A,select后面只能存在group by后面的字段。

3.一个简单的分组查询的案例

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

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

结果如下:

在这里插入图片描述

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数据库表锁了怎么解锁,感兴趣的可以了解一下
    2023-10-10
  • 安装MySQL在最后的start service停住了解决方法

    安装MySQL在最后的start service停住了解决方法

    今天为一个客户配置服务器的时候,发现的问题,原来他自己安装过mysql但安全没有配置好,路径选择的也不好,重新安装后发现在start service卡住了,通过下面的方法解决了,特分享下
    2013-11-11
  • mysql 5.6.17 绿色版(免安装)安装配置教程

    mysql 5.6.17 绿色版(免安装)安装配置教程

    这篇文章主要为大家详细介绍了mysql 5.6.17 绿色版(免安装)安装配置教程,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • windows 64位下mysql 8.0.13 安装配置方法图文教程

    windows 64位下mysql 8.0.13 安装配置方法图文教程

    这篇文章主要为大家详细介绍了windows 64位下mysql 8.0.13 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • MySQL窗口函数OVER使用示例详细讲解

    MySQL窗口函数OVER使用示例详细讲解

    这篇文章主要介绍了MySQL窗口函数OVER()用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • MySQL索引下推的实现示例

    MySQL索引下推的实现示例

    索引下推是MySQL 5.6引入的优化技术,旨在减少查询过程中的不必要行访问和回表操作,从而提升查询性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Win10下mysql 8.0.20 安装配置方法图文教程

    Win10下mysql 8.0.20 安装配置方法图文教程

    这篇文章主要为大家详细介绍了Win10下mysql 8.0.20 安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • MySQL学习第二天 安装和配置mysql winx64

    MySQL学习第二天 安装和配置mysql winx64

    MySQL学习第二天,主要为大家详细介绍了在Windows 64位操作系统下安装和配置MySQL的具体步骤,整理一份mysql winx64安装配置方法教程,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 怎样正确创建MySQL索引的方法详解

    怎样正确创建MySQL索引的方法详解

    今天小编就为大家分享一篇关于怎样正确创建MySQL索引的方法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Mysql的 存储过程procedure及具体案例

    Mysql的 存储过程procedure及具体案例

    存储过程是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名字和参数(如果有)来执行它,今天通过本文给大家介绍Mysql的 存储过程procedure及具体案例,感兴趣的朋友一起看看吧
    2024-06-06

最新评论