1、使用GROUP BY子句数据分组
2、使用HAVING子句过滤分组结果集。
3、组函数类型:AVG COUNT MAX MIN SUM
4、COUNT(*)返回表中记录总数。
5、COUNT(expr)返回 expr不为空的记录总数。
计算平均奖金
SQL> select sum(comm)/count(*) 方式一,sum(comm)/count(comm) 方式二,avg(comm) 方式三
2 from emp;
方式一 方式二 方式三
---------- ---------- ----------
157.142857 550 550
分组数据:求各个部门的平均工资
SQL> select deptno,avg(sal)
2 from emp
3 group by deptno;
group by作用于多列: 按部门,不同的工种,统计平均工资
SQL> select deptno,job,avg(sal)
2 from emp
3 group by deptno,job;
group by作用于多列:先按照第一列分组;如果相同,再按照第二列分组
SQL> --having: 对分组后的结果,再进行条件过滤
SQL> --:求部门的平均工资大于2000的部门
SQL> select deptno,avg(sal)
2 from emp
3 group by deptno
4 having avg(sal)>2000;
DEPTNO AVG(SAL)
---------- ----------
20 2175
10 2916.66667
group by的增强
SQL> select deptno,job,sum(sal)
2 from emp
3 group by rollup(deptno,job);
break on deptno skip 2
SQL> /
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
MANAGER 2450
PRESIDENT 5000
8750
20 CLERK 1900
ANALYST 6000
MANAGER 2975
10875
30 CLERK 950
MANAGER 2850
SALESMAN 5600
9400
29025