组函数: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;