Rollup 应用
    在rollup是Oracle分析函数的一种。主要用于分类统计,帮你减少很多代码的编写。
  下面看例子:
  创建环境:
 
create table income(
jidu number,
yuefen number,
jine number
);
insert into income values(1,1,500);
insert into income values(1,2,1500);
insert into income values(1,3,500);
insert into income values(1,4,500);
insert into income values(2,1,500);
insert into income values(2,2,5000);
insert into income values(2,3,500);
insert into income values(2,4,500);
insert into income values(3,1,500);
insert into income values(3,2,500);
insert into income values(3,3,200);
insert into income values(3,4,500);
insert into income values(4,1,200);
insert into income values(4,2,400);
insert into income values(4,3,500);
insert into income values(4,4,600);
commit;
 
    需求一:统计本年每个季度的营业情况
   
select jidu, sum(jine) from income group by rollup(jidu);
  执行结果:
            JIDU     SUM(JINE)
---------- ----------
                 1             3000
                 2             6500
                 3             1700
                 4             1700
                                12900
    从结果可以看出来 第一节度营业额是 3000,第二季度营业额是 6500.... 本年总营业额是12900。
 
 需求二:统计本年每个月的营业额 并且 每个季度也进行统计
 
SQL> select jidu,yuefen, sum(jine) from income group by rollup(jidu,yuefen);
    
            JIDU         YUEFEN     SUM(JINE)
---------- ---------- ----------
                 1                    1                500
                 1                    2             1500
                 1                    3                500
                 1                    4                500
                 1                                    3000
                 2                    1                500
                 2                    2             5000
                 2                    3                500
                 2                    4                500
                 2                                    6500
                 3                    1                500
                 3                    2                500
                 3                    3                200
                 3                    4                500
                 3                                    1700
                 4                    1                200
                 4                    2                400
                 4                    3                500
                 4                    4                600
                 4                                    1700
    
            JIDU         YUEFEN     SUM(JINE)
---------- ---------- ----------
                                                     12900
 group by rollup(jidu,yuefen)指的是每个季度都通过group by yuefen where jidu=?进行一次季度小统计,最后也要有一个group by (jidu,yuefen)大的统计
select jidu,yuefen, sum(jine),grouping(jidu),grouping(yuefen) from income group by rollup(jidu,yuefen);
    
            JIDU         YUEFEN     SUM(JINE) GROUPING(JIDU) GROUPING(YUEFEN)
---------- ---------- ---------- -------------- ----------------
                 1                    1                500                            0                                0
                 1                    2             1500                            0                                0
                 1                    3                500                            0                                0
                 1                    4                500                            0                                0
                 1                                    3000                            0                                1
                 2                    1                500                            0                                0
                 2                    2             5000                            0                                0
                 2                    3                500                            0                                0
                 2                    4                500                            0                                0
                 2                                    6500                            0                                1
                 3                    1                500                            0                                0
                 3                    2                500                            0                                0
                 3                    3                200                            0                                0
                 3                    4                500                            0                                0
                 3                                    1700                            0                                1
                 4                    1                200                            0                                0
                 4                    2                400                            0                                0
                 4                    3                500                            0                                0
                 4                    4                600                            0                                0
                 4                                    1700                            0                                1
    
            JIDU         YUEFEN     SUM(JINE) GROUPING(JIDU) GROUPING(YUEFEN)
---------- ---------- ---------- -------------- ----------------
                                                     12900                            1                                1
  可以看到很详细的报表情况。
  其中上面的grouping(字段)如果是0表示不是使用该字段进行group的 如果是1表示 使用该字段进行的group