Group分组及其扩展总结(一)

 

1 --1.单独使用Group By子句:每个分组返回一条记录
2 select a.division_id, sum(a.salary)
3   from employees2 a
4  group by a.division_id
5  order by a.division_id

运行结果:

1    DIVISION_ID    SUM(A.SALARY)
2 1    BUS    1610000
3 2    OPE    1320000
4 3    SAL    4936000
5 4    SUP    1015000
1 --2.扩展子句Rollup: 每个分组返回一条小计,最后返回一条总计
2 select a.division_id, sum(a.salary)
3   from employees2 a
4  group by rollup(a.division_id)
5  order by a.division_id

运行结果:最后多了一行总计

1    DIVISION_ID    SUM(A.SALARY)
2 1    BUS    1610000
3 2    OPE    1320000
4 3    SAL    4936000
5 4    SUP    1015000
6 5        8881000

 

 1 --2.1向Rollup传递多列:按照第一列给出小计,最后有所有分组的小计
 2 select b.division_id,b.job_id, sum(b.salary)
 3   from employees2 b
 4  group by rollup(b.division_id, b.job_id)
 5  order by b.division_id, b.job_id
 6 
 7 结果为:
 8 DIVISION_ID    JOB_ID    SUM(B.SALARY)
 9 1    BUS    MGR    530000
10 2    BUS    PRE    800000
11 3    BUS    WOR    280000
12 4    BUS          1610000
13 5    OPE    ENG    245000
14 6    OPE    MGR    805000
15 7    OPE    WOR    270000
16 8    OPE          1320000
17 9    SAL    MGR    4446000
18 10   SAL    WOR    490000
19 11   SAL           4936000
20 12   SUP    MGR    465000
21 13   SUP    TEC    115000
22 14   SUP    WOR    435000
23 15   SUP           1015000
24 16                 8881000

注意:其他聚合函数也可以和rollup一起使用,rollup使用要注意的就是列的顺序比较重要。

--3:扩展子句2:Cube子句:返回所有列组合的小计并在最后给出总计
select b.division_id, b.job_id, sum(b.salary)
  from employees2 b
 group by cube(b.division_id,b.job_id)
 order by b.division_id, b.job_id

运行结果为
DIVISION_ID JOB_ID
SUM(B.SALARY) 1 BUS MGR 530000 2 BUS PRE 800000 3 BUS WOR 280000 4 BUS 1610000 5 OPE ENG 245000 6 OPE MGR 805000 7 OPE WOR 270000 8 OPE 1320000 9 SAL MGR 4446000 10 SAL WOR 490000 11 SAL 4936000 12 SUP MGR 465000 13 SUP TEC 115000 14 SUP WOR 435000 15 SUP 1015000 16 ENG 245000 17 MGR 6246000 18 PRE 800000 19 TEC 115000 20 WOR 1475000 21 8881000

调换列的顺序后仅是显示的顺序不同,不影响查询的结果。

posted @ 2012-11-04 10:58  原想  阅读(399)  评论(0编辑  收藏  举报