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;
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
---------- ----------
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
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
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
转载于:https://blog.51cto.com/ganludong/317031