Oracle(第五章--组函数和分组统计)

组函数:n个数---->1个数
单行函数: n个数------>n个数
多表连接类型和对应的语法格式
select [collumn,] group_function(column)
from table
[where condition]
[group by column]
[order by column];
1、组函数在数值型数据的应用
例如:统计全公司员工最高收入、最低收入、平均收入和收入总和
select max(sal),min(sal),avg(sal),sum(sal) from emp;
2.max和min应用在日期型数据中
例如:统计哪些员工是入职最早的、、哪些员工是入职最晚的
select max(hiredate),min(hiredate) from emp;
3.count函数应用的几点说明
注意:count()和count(column)
例如:统计emp数据表中的记录数
select count(
) from emp;

select count(comm) from emp;

count(*)它在统计记录数的过程,是不区分是否有空值
count(column)它在统计记录数的过程,区分是否有空值
既然空值存在会影响我们的统计结果,但是需要想办法解决问题
请你完成emp数据表中的平均奖金计算,请问sql语句怎么编辑
select avg(comm) from emp;
select avg(nvl(comm,0)) from emp;
注意:如果因为空值的存在影响统计结果,我们应该先使用单行函数nvl将数据转换一下
4.group by(分组统计)
例如:分部门统计各部门的工资
select deptno,avg(sal) from emp group by deptno;
拓展应用:
例如:分部门、分工种统计收入总和
select deptno,job,sum(sal) from emp group by deptno,job;
例如:请问以下语句正确吗
select deptno,count(ename) from emp;

不正确。因为如果在查询中使用了组函数,任何不在组函数中的列或表达式都必须包含在group by子句中。

修改为:
select deptno,count(ename) from emp group by deptno;
5.having
例如:请问以下语句正确吗
select deptno,avg(sal) from emp where avg(sal)>2000 group by deptno;

错误语句。不能在where子句中限制组可以通过having子句限制组
修改为:
select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;

例如:查询工种不是以sales开头,收入总和大于5000
select job,sum(sal) from emp where job not like ‘SALES%’ group by job having sum(sal)>5000;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值