温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL初学者如何使用分组聚合查询

发布时间:2021-10-26 16:13:56 来源:亿速云 阅读:198 作者:iii 栏目:开发技术

本篇内容介绍了“MySQL初学者如何使用分组聚合查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 1.分组查询的原理图

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

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

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

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

    • 2)黄同学支大招

    • 3)案例讲解

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

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

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

        • 8.分组查询的总结

          1.分组查询的原理图

          MySQL初学者如何使用分组聚合查询

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

          MySQL初学者如何使用分组聚合查询

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

          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关键字这个地方卡壳。于是我希望自己能够用白话图文的方式,让你真正搞明白这个关键字的含义。

          MySQL初学者如何使用分组聚合查询

          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

          结果如下:

          MySQL初学者如何使用分组聚合查询

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

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

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

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

          2)黄同学支大招

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

          MySQL初学者如何使用分组聚合查询 

          3)案例讲解

          原始数据集如下:

          MySQL初学者如何使用分组聚合查询

          ① 分组前筛选

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

          MySQL初学者如何使用分组聚合查询

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

          MySQL初学者如何使用分组聚合查询

          ② 分组后筛选

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

          MySQL初学者如何使用分组聚合查询

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

          MySQL初学者如何使用分组聚合查询

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

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

          MySQL初学者如何使用分组聚合查询

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

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

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

          结果如下:

          MySQL初学者如何使用分组聚合查询

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

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

          MySQL初学者如何使用分组聚合查询

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

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

          MySQL初学者如何使用分组聚合查询

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

          MySQL初学者如何使用分组聚合查询

          8.分组查询的总结

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

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

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

          “MySQL初学者如何使用分组聚合查询”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

          向AI问一下细节

          免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

          AI