分组查询
在实际的运用中,需要先进行分组,然后对每一组的数据进行操作,这时候需要分组查询
select ... from ... group by ...;
eg:比如计算每个部门的工资和
找出每个工作岗位的工资和?
实现思路:按照工作岗位进行分组,然后对工资求和
select job,sum(sal) from emp group by job;
执行顺序:先从emp中查询数据;然后对job进行分组;然后对每一组数据进行求和
重点结论:在一条sql语句中,如果含有group by语句,select只能跟:参加分组的字段,以及分 组函数;其他的一律不能跟
找出每个部门的最高薪资
select deptno,max(sal) from emp group by deptno;
找出每个部门,不同工作岗位的最高薪资
select max(sal) from emp group by deptno,job;
/**按照两个字段进行分组**/
找出每个部门最高薪资,要求显示最高薪资大于3000的
select max(sal) from emp where sal>3000 group by deptno;
or
select max(sal) from emp group by deptno having max(sal)>3000;//效率低
/**可以用having来再次过滤,having必须和group by一起使用
如果where和having都可以实现,则优先使用where**/
找出每个部门平均薪资,要求显示平均薪资高于2500的
select avg(sal) from emp group by deptno having avg(sal)>2500;
/**这个只能用having实现,where不能实现,因为分组函数avg不能写在where里**/
找出每个岗位的平均薪资,要求显示平均薪资大于1500,除了MANAGER之外,要求按照平均薪资降序排列
select avg(sal) from emp where job!='MANAGER' group by job having avg(sal)>1500 order by avg(sal) desc;