又到国庆了,2020年还远吗?今年的flag都完成了吗?我是没有完成,趁着国庆继续学习数据库。今天学习的是分组函数。
先上知识点:
1、分组查询涉及到的两个子句是:
-group by
-having
2、group by
2.1 order by【表示通过那个或者哪些字段进行排序】
Group by【表示通过那个或者哪些字段进行分组】
2.2 案例:找出每个工作岗位的最高薪水
先将工作岗位分组+再求按工资求最大值max函数
Group by job
Max(sal)
Select Max(sal)From Emp Group by job;
重点:若一条DQL语句当中有group by子句,那么select关键字后面只能跟参与分组的字段和分组函数
2.3计算每个部门的平均薪水(按照部门编号分组,对每一组求平均薪水)
Select deptno,avg(sal)as avgsal from emp group by deptno;
2.4计算不同部门中的不同工资岗位的最高薪水
Select deptno,job,max(sal) as maxsal from emp group by deptno,job;//两个字段联合起来分组
2.5找出每个工作岗位的最高薪水,除manger之外
Select job max(sal) from emp where job<>manger group by job;
2.6 找出每个工作岗位的平均薪水,要求显示平均薪水大于1500;
Select job avg(sal) from emp group by job having avg(sal)>1500;
3、having
Having和where功能都是为了完成数据的筛选
Where和having后面都是添加条件
Where在groupby之前完成过滤
Having在group by 之后完成过滤
原则:尽量在where中过滤,无法过滤的数据,通常都是需要先分组之后再过滤的,这个时候可以选择使用having。效率问题。
一个完整的DQL语句总结:
Select
From
Where
Group by
Having
Order by
以上的关键字顺序不能变,严格遵守执行顺序From:从某张表中检索数据
Where: 经过某条件进行过滤
Group by 然后分组
Having 分组之后不满意再过滤
Select 查询出来
Order by 排序输出