日期:2014-05-16  浏览次数:20467 次

ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句

?

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
---------- ---------- ---------- ------ ------------------------- ------