分组查询(非常重要)
19,分组查询
19.1、分组查询?
先进行分组,再对每一组的数据操作
select.. from... group by...
计算每个部门的工资和?
计算每个岗位的平均薪资?
计算每个工作岗位的最高薪资?
19.2、将之前的关键字全部组合在一起,看一下执行顺序?
select...from....where....group by...order by...
执行顺序:1from 2where 3group by 4select 5order by
为什么分组函数不能直接使用where后
分组函数在使用时必须先分组才能使用,where执行时还没分组,where后不能出现分组函数
select sum(sal) from emp; 因为select在group by之后执行
19.3、找出每个工作岗位的工资和?
思路:按照工作岗位分组,然后对工资求和
select job,sum(sal) from emp group by job;
先从emp表查询,根据job字段分组,对每一组数据进行sum(sal)
select ename,job,sum(sal) from emp group by job;该条语句在mysql中可以执行,但毫无意义ename有14条,job只有5条
在oracle中执行报错,oracle语法要严格一些
重点结论:在一条select语句中,如果有group by 语句的话,select后面只能跟:参加分组的字段,以及分组函数。
其它的一律不能跟
19.4、找出每个部门的最高薪资?
select deptno,max(sal) from emp group by deptno;
19.5、找出每个部门,不同工作岗位的最高薪资?
select ename,job,sal,deptno from emp;
技巧:两个字段联合成1个字段看(两个字段联合分组)
select deptno,job,max(sal) from emp group by deptno,job;
19.6、找出每个部门最高薪资,要求显示最高薪资大于3000的?
使用having可以对分完组之后的数据进一步过滤。
注意:having不能单独使用,having不能代替where,having必须和group by联合使用
第一步:select deptno,max(sal) from emp group by deptno;
第二步:select deptno,max(sal) from emp group by deptno having max(sal) > 3000;
以上sql语句执行效率低
select deptno,max(sal) from emp where sal > 3000 group by deptno;
先将大于3000找出,再分组。
优化策略:where和having,优先选择where,where实在完成不了再用having
19.7、where没办法的??
找出每个部门平均薪资,要求显示平均薪资高于2500的。
第一步:select deptno,avg(sal) from emp group by deptno;
第二步:select deptno,avg(sal) from emp group by deptno having avg(sal) > 2500;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)