组函数语法
对多行进行的计算
组函数类型 | 解释 |
---|---|
avg() | 平均 |
count() | 统计 |
max() | 最大值 |
min() | 最小值 |
stddev | 估算标准偏差 |
sum | 求和 |
variance | 方差 |
- group by 字句进行分组
- having 字句聚合函数过滤
序列 | 举例 |
---|---|
rownum() |
1 2 3 4 5 |
rank() over (partition by order by) |
1 2 2 4 5 |
dense_rank() over (partition by order by) |
1 2 2 3 4 |
select rank() over (partition by deptno order by sal desc) ord from emp; |
- partition by 给结果集分组
- order by 给结果集排序
- rank() 在每个分组内部进行排名
应用实例
1. 雇员中最大工资,最小工资,工资总和,平均工资。
SQL> select min(sal),max(sal),sum(sal),avg(sal) from emp; |
2. 每个部门的工资总和和平均值
SQL> select deptno,to_char(avg(sal),'L99999.99') avg_sal,to_char(sum(sal),'L99999.99') sum_sal from emp group by deptno; |
3. 部门工资总和的最大值为多少
SQL> select max(sum(sal)) from emp group by deptno; |
4. 部门工资总和最多的部门名称和工资总和
SQL> select deptno,sum_sal from (select deptno,sum(sal) sum_sal from emp group by deptno order by sum_sal desc ) where rownum < 2; |
5. 工资总和超过9000的部门
SQL> select deptno,sum(sal) sum_sal from emp group by deptno having sum_sal > 9000; |
- 注意having字句后面不可以使用别名。
- where字句不可以过滤组函数运算后的结果。
6. 雇员中工资相同的员工分别是谁,工资为所少?
SQL> select e1.ename,e2.ename,e1.sal from emp e1,emp e2 where e1.sal=e2.sal and e1.ename != e2.ename; |
7. 相同的工资有几个?
SQL> select sal,count(sal) from emp group by sal; |
8. 每一年参加工作的雇员的数量
SQL> select count(to_char(hiredate,'yyyy')) enum, to_char(hiredate,'yyyy') year from emp group by to_char(hiredate,'yyyy'); |
课后练习
select max(sal),min(sal),sum(sal),avg(sal) from emp; |