count(*),count([distinct] 列名),sum(),avg(),max(),min().
例如:要求计算雇员的平均服务年限:
select trunc(avg(months_between(sysdate,hiredate)/12)) from emp;
分组查询:
例如:统计出每个职位的名称,人数,平均工资:
select job,count(*),avg(sal)
from emp
group by job;
统计限制:
限制一:在没有编写group by 子句,表示全表分组,此时select子句中只允许出现统计函数,不允许出现其他字段。
错误代码:select count(ename),ename from emp;
限制二:在使用group by 子句分组的时候,select子句中只允许出现分组字段与统计函数,其他字段不允许出现。
错误代码:select job,count(ename),ename from emp group by job;
限制三:统计函数允许嵌套,但是嵌套后select中不允许再出现任何字段,包括分组字段。
错误代码:select deptno,max(avg(sal))
from emp
group by deptno;
where 子句上不允许使用统计函数,原因:where是在group by之前使用的,属于分组前的数据筛选。
having : 进行分组后的过滤
例如:select job,avg(sal) from emp group by job having avg(sal)>2000;
显示非销售人员的工作名称以及从事同一工作雇员的工资的总和,并且要满足从事同一工作的雇员的工资>5000,输出结果按月工资的合计升序排序
select job,sum(sal) sum from emp where job<>'salsman' group by job having sum(sal)>5000 order by sum asc;
例如:要求计算雇员的平均服务年限:
select trunc(avg(months_between(sysdate,hiredate)/12)) from emp;
分组查询:
例如:统计出每个职位的名称,人数,平均工资:
select job,count(*),avg(sal)
from emp
group by job;
统计限制:
限制一:在没有编写group by 子句,表示全表分组,此时select子句中只允许出现统计函数,不允许出现其他字段。
错误代码:select count(ename),ename from emp;
限制二:在使用group by 子句分组的时候,select子句中只允许出现分组字段与统计函数,其他字段不允许出现。
错误代码:select job,count(ename),ename from emp group by job;
限制三:统计函数允许嵌套,但是嵌套后select中不允许再出现任何字段,包括分组字段。
错误代码:select deptno,max(avg(sal))
from emp
group by deptno;
where 子句上不允许使用统计函数,原因:where是在group by之前使用的,属于分组前的数据筛选。
having : 进行分组后的过滤
例如:select job,avg(sal) from emp group by job having avg(sal)>2000;
显示非销售人员的工作名称以及从事同一工作雇员的工资的总和,并且要满足从事同一工作的雇员的工资>5000,输出结果按月工资的合计升序排序
select job,sum(sal) sum from emp where job<>'salsman' group by job having sum(sal)>5000 order by sum asc;