动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

MySQL分组查询操作

08-25 16:48 52浏览
举报 T字号
  • 大字
  • 中字
  • 小字

数据处理是使用java数据库的一项基本能力,在MySQL数据库用到MySQL分组查询的功能,那么该怎样进行MySQL组查询操作呢,下面就来学习如何将数据按照分组的方式来返回某一类的数据的统计。

MySQL分组查询操作会用到groub by进行,那首先来介绍一下groub by分组的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组

可用于单个字段分组,也可用于多个字段分组。作用是通过哪个或哪些字段进行分组,用法就是:groub by 字段名称。

1、按照单个字段分组

案例找出每个工作岗位的最高薪水

思路分析:按照工作岗位分组,然后对每一组求最大值。SQL语句中肯定包含 group by、max(sal);

通过对job分组,然后对每一组取最大值,使用max(sal)查询结果;

上面这种写法可以,因为正好工作岗位Job也是5;

MySQL中可以,mysql语法这方面比较松散,不严格,查询结果没有意义;但是在oracle中不可以,执行时就报错,语法严格。

重点结论:有 group by的DQL语句中,select语句后面只能跟分组函数+参与分组的字段;计算每个工作岗位的最高薪水,并且按照由低到高进行排序。

思路分析:先按照工作岗位 job 进行分组,然后对每一组薪水求最大值 max,最后再根据每一组薪水的最大值进行由低到高排序;

注意如果使用了order by ,order by 必须放到 group by 后面。

计算每个部门的平均薪水,思路分析:首先,按照部门编号分组,然后,对每一组的薪水求平均值。

2、按照多个字段分组

计算出不同部门不同岗位的最高薪水

思路分析:首先,把deptno和job看成一个字段进行联合字段分组,联系到 distinct关键字。

找出每个工作岗位的最薪水,除 MANAGER之外

思路分析:先将 job 等于MANAGER的过滤掉,然后再根据工作岗位进行分组,对每一组求最大薪水。

3、使用 having对分组后的数据进行过滤

作用:如果想对分组的数据再进行过滤,需要使用 having 子句;

where与having区别:where和 having都是为了完成数据的过滤,它们后面都是添加条件;where 是在 group by 之前完成过滤;having 是在 group by 之后完成过滤;

案例:找出每个工作岗位的平均薪水,要求显示平均薪水大于2000的;

思路分析:先对工作岗位job分组,然后对每一组薪水求平均值,最后再对每一组平均薪水的值进行大于2000的条件过滤;

以上写法是错误的:where关键字后面不能直接使用分组函数,这与SQL语句的执行顺序有关系,它会先执行from emp,然后再进行where条件过滤,where条件过滤结束之后再执行group by分组,之后才会显示出查询结果。

纠正以上写法:

注意能够在where过滤的数据不要放到having中进行过滤,否则影响SQL语句的执行效率

以上就是对MySQL分组查询操作的介绍,希望这篇文章可以帮助到大家,相信java零基础的新手也可以很快的学会MySQL分组查询的相关操作,可以在空闲时间通过java培训课程中学到更多的MySQL数据库的内容。

0人推荐
共同学习,写下你的评论
0条评论
国家有关部门
程序员国家有关部门

6篇文章贡献20349字

作者相关文章更多>

推荐相关文章更多>

MySQL开发规范

达芬奇09-04 11:38

必须掌握的30种SQL语句优化

不写代码你养我啊08-23 11:30

ES(Elasticsearch)支持PB级全文搜索引擎入门教程

HelloWorld09-29 17:28

Java面试中的hadoop面试题及答案整理

兔子06-15 17:15

数据库分类之速成篇

呵呵呀06-17 18:54

发评论

举报

0/150

取消