聚合函数和分组计算

1.聚合函数

聚合函数又称为统计函数

常用函数:

count()计数、总数量

max()最大值

min()最小值

sum()求和

avg()求平均值

round()四舍五入

例如:查询部门为30的雇员人数?

select count(empno) 总人数 from emp where deptno='30'; select deptno 部门编号,count(empno) 总人数 from emp where deptno='10'; select max(sal) from emp; select min(sal) from emp;

注意:聚合函数在统计时会忽略null值

练习:

查询部门为30的最高工资,最低工资和平均工资?

select deptno 部门编号,max(sal) 最高工资,min(sal) 最低工资,round(avg(sal),2) 平均工资 from emp where deptno='30';

2.分组统计

2.1语法

select 字段名 别名,... from 表名 别名,... inner join 表名1 别名1 on 多表之间的关联关系 where 条件 group by 分组条件 having 分组后的条件 order by 排序字段1[asc丨desc],排序字段2[asc丨desc]...;(升|降)

2.2示例

应用场景:

1.查询题意中出现了每个、各个、按...这种字眼----每个谁就按谁分组

2.查询结果中存在聚合函数计算得到的结果,如最大、最小、求和、计数、求平均。

例如:查询每个部门的平均工资?

select deptno,round(avg(sal)) 平均工资 from emp group by deptno;

如果想出现部门名称:

select d.deptno,d.dname,round(avg(sal),2) 平均工资 from emp e inner join dept d on e.deptno=d.deptno group by deptno;

注意:

在MySQL中分组统计时可以查询出分组列以外的其他列,而oracle不行

建议将要查询出的列作为分组列

练习:

查询部门名称及每个部门的员工数量?

select d.dname 部门名称,count(e.empno) from emp e inner join dept d on e.deptno=d.deptno group by 部门名称;

例如:查询平均工资大于2000的部门编号和平均工资?

select d.deptno 部门编号,round(avg(sal),2) 平均工资 from dept d,emp e where d.deptno=e.deptno group by 部门编号 having 平均工资>2000;

写在having不在where的原因:优先级不同,先分组在查询

例如:查询非销售人员的职位名称,以及从事同一工作的雇员工资总和,并且要满足总和大于5000,查询雇员按月工资总和升序排列

select job 职位,sum(sal) sum 工资总和 from emp where job <> 'salesman' group by job having 工资总和>5000 order by 工资总和;

例如:查询部门平均工资的最大值

select max(avg(sal)) from emp group by deptno;----mysql不支持

在MySQL中聚合函数不能请嵌套使用,而oracle可以

select max(tt.平均工资) from (select avg(sal) 平均工资 from emp group by deptno) tt;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值