?
ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句
?
??????????? 1、使用 ROLLUP子句
????????????2、使用 CUBE子句
??????????? 3、使用 GROUPING()函数
????????????4、使用 GROUPING SETS子句
??????????? 5、使用 GROUPING_ID()函数
??????????? 6、使用 GROUP_ID()函数
?
GROUP BY 可选项 什么时候可以无: 非分组查询中,聚合函数实际上等于将表中所有记录作为一个组来运算。 此时在 select列表中指定的列只能是包含聚组函数,不能包含数据表本身的列。 比如求所有员工的总工资: SELECT SUM(SALARY) FROM EMP; 什么时候必须有: 在分组查询中,聚合函数是将数据按分组关键字分组,然后对每一组的函数自变量中的内容进行聚合运算。 Select 子句字段可以是分组关键字(group by 后面字段)和聚合函数。 比如求各个部门员工总工资: SELECT DEPTNAME, SUM(SALARY) FROM EMP GROUP BY EMP.DEPTNAME; 注意: a.如果没有group by 子句,select 列表中不允许出现字段与分组函数混用的情况。 b.在带有group by子句的查询语句中,在select列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数。 出现在select列表中的字段,如果不是包含在分组函数中,那么该字段必须同时出在Group by子句中。 c.group by后面字段的顺序不同分组结果不同。
?
?
/* --设置输出格式 SET linesize 1000; SET pagesize 25; COLUMN deptno format A10; COLUMN DEPTNAME format A10; COLUMN job format A6; COLUMN NAME format A25; COLUMN lev format A10; */ -- 建表:EMP create table EMP ( id NUMBER(4), deptno VARCHAR2(50), deptname VARCHAR2(50), job VARCHAR2(50), name VARCHAR2(50), lev VARCHAR2(50), salary NUMBER(16,2) ); -- EMP表数据 SQL> SELECT * FROM EMP; ID DEPTNO DEPTNAME JOB NAME LEV SALARY ---------- ---------- ---------- ------ ------------------------- ---------- ---------- 1 BUS PRE James Smith 2000 2 SAL MGR Ron Johnson 875 3 SAL WOR Fred Hobbs 350 4 SUP MGR Susan Jones 500 5 SAL WOR Rob Green 875 6 SUP WOR Jane Brown 500 7 SUP MGR John Grey 662.5 8 SUP WOR Jean Blue 275 9 SUP WOR Henry Heyson 312.5 10 OPE MGR Kevin Black 562.5 11 OPE MGR Keith Long 412.5 12 OPE WOR Frank Howard 312.5 13 OPE WOR Doreen Penn 362.5 14 BUS MGR Mark Smith 387.5 15 BUS MGR Jill Jones 437.5 16 OPE ENG Megan Craig 612.5 17 SUP TEC Matthew Brant 287.5 18 OPE MGR Tony Clerke 500 19 BUS MGR Tanya Conway 500 20 OPE MGR Terry Cliff 537.5 21 SAL MGR Steve Green 687.5 22 SAL MGR Roy Red 937.5 ID DEPTNO DEPTNAME JOB NAME LEV SALARY ---------- ---------- ---------- ------ ------------------------- ------