数据库03分组,单行,group,having

分组函数:也叫多行处理函数(输入多行,输出一行)
找出工资总和:select sum(sal) from emp;
找出最高工资:select max(sal) from emp;
找出最低工资:select min(sal) from emp;
找出平均工资:select avg(sal) from emp;
找出总人数:select count(*) from emp; select count(ename) from emp;
分组函数自动忽略NULL。

找出平均工资:select avg(sal) from emp;
找出高于平均工资的员工:select name,sal from emp where sal > avg(sal);//错,分组函数不可直接使用在where子句中,因为group by 是在where执行之后才会执行的。
执行顺序:select 5 from 1 where 2 group by 3 having 4 order by 6。
找出平均工资:select avg(sal) from emp;//平均工资为x
找出高于平均工资的员工:select name,sal from emp where sal >x;
可合并:select name,sal from emp where sal >(select avg(sal) from emp);

count(*):不是统计某个字段数据个数,而是统计总记录条数
count(comm):表示统计comm字段中不为NULL的数据总数量。

单行处理函数:输入一行,输出一行。
计算每个员工的年薪:select name,(sal+comm)*12 as yearsal from emp;//(sal+comm)工资+补助
重点:所以数据库规定,只要有NULL参与结果一定是NULL。
ifnull()空处理函数:属于单行处理函数。
select name,ifnull(comm,0) as comm from emp;

group by和 having:
group by:按照某个字段或者某些字段进行分组。
having:对分组之后的数据进行再次过滤。
找出每个工作岗位的最高工资:select max(sal),job from emp group by job;
注意:分组函数一般都会和group by联合使用,并且任何一个分组函数(count sum avg max min)都是在group by语句执行结束后才会执行的。
当一条语句没有group by的话,整张表的数据会自成一组。
select name,max(sal),job from emp group by job;
以上在MySQL有结果但是没有意义,在oracle数据库中会报错,语法错误。
记住一句规则:当一条语句有group by,select后面只能跟分组函数和参与分组的字段。
每个工作岗位的平均工资:select job,avg(sal) from emp group by job;

多个字段能不能联合起来一块分组?
找出每个部门不同岗位的最高工资:select deptno,job,max(sal) from emp group by depton,job;
找出每个部门最高工资,要求工资大于2000:select max(sal),deptno from emp where sal >2000 group by deptno;
找出每个部门平均工资,要求显示工资大于2000:select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;//where后面不能用分组函数

总结一个完整的DQL语句怎么写?执行顺序
select 5
from 1
where 2
group by 3
having 4
order by 6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值