rollup只有第一个参数起作用也是理解不正确的,先看看例子吧:# o6 U7 T- n$ W9 v$ a* S. y6 R( h7 k
SQL> select grade,id,num from a;
: B( {; B" T( Z% V+ M* A" h GRADE ID NUM
! s) A7 M& G$ ^. B3 ^4 p ---------- ---------- ----------# A$ m+ Q1 a# v+ T$ N8 j
a 1 1* ~$ x% X" G/ P6 w
a 2 25 R0 w! Y7 v' h
b 3 4
9 p, M! b: K5 b( M2 Q% c* U$ ` b 4 44 K! G. R/ u9 H* Z1 f" a6 |
对grade字段进行rollup:
. o- e7 s/ |( Q9 F- j SQL> select grade,sum(num) from a group by rollup(grade);1 f* {* ^7 v4 n% t) \9 F
GRADE SUM(NUM)
& N0 j( Z, o$ D, f1 z ---------- ----------
5 h# L" N& m( X- }4 E$ K! ]2 T' S a 3
! |6 D; o& B- H+ Z b 89 U% x6 d! d0 B5 A6 E, k6 P
11: _/ b0 } I/ y( S" ?/ O2 p
同时对grade和id字段进行rollup
2 F3 I! S+ |9 \) E SQL> SELECT decode(grouping_id(grade,ID),2,'小计',3,'合计',grade) grade,
% ^9 T. k5 R7 n( {' r 2 decode(grouping_id(grade,ID),1,'小计',3,'合计',ID) ID,
+ q1 `4 a1 n" D8 @0 [' E 3 SUM(num)
. C) P. d; `. I9 b( U 4 FROM a GROUP BY ROLLUP(grade,ID)
+ F- U% l- z% g5 r4 U; R4 _ 5 /% k4 c+ L4 W- G- R6 n
GRADE ID SUM(NUM)% P# y: T$ ~$ [' z+ R0 C: x: X
---------- ---------- ----------2 d! s+ Z6 [" g/ B( a) w" U
a 1 18 p4 T/ G! u) j9 x8 X% D8 T8 L6 h
a 2 2
- t: H6 W/ x7 E% e5 R a 小计 3
. y. J+ J8 I6 S4 S b 3 4! ?/ ?# J4 c' I* b! W
b 4 4" n c: L5 N- I' G5 V$ g3 e; p
b 小计 8
- U& {6 L$ g5 x* Z 合计 合计 11) x5 a2 y1 n/ q& v- c: e3 X8 U/ Z
7 rows selected
4 W6 E/ c7 P. r N4 Z8 h6 i 再看看先对grade分组,再对id进行rollup的情况:6 M {& O4 k+ v6 n9 w
SQL> SELECT grade,
d" B& e: T# ]8 ~1 P" T 2 decode(GROUPING(ID),1,'合计',ID) ID,
2 w3 o- `' H1 _3 n; O 3 SUM(num)$ p3 P% [$ `. |6 B
4 FROM a GROUP BY grade,rollup(ID)
7 |: @1 x( A! Q9 z 5 /
( J/ W1 B' X0 T I j GRADE ID SUM(NUM). e1 T3 i+ \( F. I9 b* l9 @, n
---------- ---------- ----------: N- P0 ^$ i6 W' M+ t' ^$ E- t
a 1 17 x# m! G9 B3 U0 G! a
a 2 2
+ r- C. ~( X6 S; `. ]! j a 合计 37 O8 O) X6 m4 F, Q; Z$ l
b 3 48 ?( Z( E0 y" Q& Y0 A2 G' m
b 4 4
n+ F% h: Q( @2 u. [! K b 合计 8
3 D% S3 v5 k [8 p" z) Y0 y7 l 6 rows selected, f5 {2 U# Z7 j- t/ B: M
这里GROUP BY grade,rollup(ID)跟你的理解应该很相近了,而且可以看出GROUP BY grade,rollup(ID)结果跟ROLLUP(grade,ID)很类似,只是少了最后1行总合计,但是也可以就看出rollup多个字段时并不是只有1个字段起作用的
( d/ m2 M5 J5 @* g! Y4 { 可以认为你理解的是只对第一个字段的累计,跟GROUP BY grade,rollup(ID)的结果很接近,再看rollup3个字段的情况:
$ F4 W8 n+ R; y( j' ? SQL> select part,grade,id,num from a;
3 C" u# V6 c7 R- X4 P# ~7 Q PART GRADE ID NUM
+ n! e/ o, I1 r1 ^/ Z+ L7 Q ---- ---------- ---------- ----------: h9 U: S& r6 _7 y
p1 a 1 10 [* Y8 l* B' T+ ?( `" D5 V5 i
p1 a 2 2
; G4 i1 G K+ w( X+ { p1 b 3 3
4 _2 s v7 i. Z& b0 N: H4 e p1 b 4 45 z" D' U( b6 n
p2 c 5 5
4 q9 b& \! g. W1 f: O6 S p2 d 6 6
+ h3 i$ J% h, ]/ e8 u9 @ 6 rows selected# @3 G& ]" I5 p& P
SQL>
+ r: l5 C% a* e$ w1 X SQL> SELECT decode(grouping_id(part,grade,ID),7,'总计',part) part,
# w5 a2 W( ]: k" s0 |; | 2 decode(grouping_id(part,grade,ID),3,'小计',7,'总计',grade) grade,
2 @8 U# J. |7 I; N5 y 3 decode(grouping_id(part,grade,ID),1,'小计',3,'小计',7,'总计',ID) ID,, k9 b6 ~; c( n1 s4 C6 t
4 SUM(num)
6 t7 U6 X1 R! B9 `4 ]" e 5 FROM a GROUP BY ROLLUP(part,grade,ID)
: e8 b; \ c2 Z- f, } 6 /
. S% L% v: C% C" Z: Q PART GRADE ID SUM(NUM). `$ L3 X- @1 y- q0 u/ r a& p3 s" M
---- ---------- ---------- ----------
) l7 }& h% X7 @# n, a p1 a 1 1
. Y1 P8 _" O) w! B. g) I( j p1 a 2 24 x- Y/ D; E6 \( C7 t9 M8 y" i6 c
p1 a 小计 3
7 ^! E& b' k0 P7 m( ^9 v7 O p1 b 3 3
9 J4 R' c" Q2 Z( j p1 b 4 4
. N `/ k, [5 @8 T0 n7 I p1 b 小计 7
& `0 Z+ F# S; o7 |6 t7 x4 a! b5 x p1 小计 小计 10$ c6 Z6 t" C# J( s
p2 c 5 53 L7 F- _5 M5 W% G5 b& A- c# H
p2 c 小计 5* c9 [! P% l6 f6 T
p2 d 6 6
. A0 P# g2 S% S' K- R p2 d 小计 6" m6 ?& Z& z: p8 P
p2 小计 小计 11
! j: d- N0 r% t) h5 \0 O 总计 总计 总计 21
# `' Q$ l8 f, e! F5 M! Q+ h$ H' f 13 rows selected( [8 k* j. i b. x8 F
这里不光只对第一个字段做了累计,先按(part,grade,ID)分组累计,然后按(part,grade)分组累计,再按(part)分组累计,最后累计全部6 U/ D) Y3 f: P$ t1 O3 c
再看看rollup 和 cube的区别:6 O, x6 H8 h+ `& `( H6 J
对于ROLLUP(part,grade,ID),grouping_id(part,grade,ID)的值范围在(0,1,3,7)间即
& @( D* Q2 {( x" h/ K part,grade,ID(作为合计时计为1)8 d2 S6 ]/ u5 b, W
0,0,0" I* x' U. M+ h
0,0,1
9 |$ B3 r3 C7 g 0,1,14 I# O' i# X6 \9 N
1,1,1
9 }- X) d4 u- ~9 t1 Y 而对于cube(part,grade,ID),grouping_id(part,grade,ID)的值范围在0-7之间即& b) q% l0 M8 M* [: G3 Y* y+ g5 q" t
part,grade,ID(作为合计时计为1)7 t7 O% G3 C% ~' x; m- g
0,0,0
# U2 `0 ?- t" {" t2 e$ ? a 0,0,1
9 q2 H5 u! W, U5 P 0,1,0
3 E7 I, F. g7 g$ C( D1 x2 T 0,1,1
9 B- E* T1 B6 C) z; k$ u 1,0,00 r; k: A) z' p1 J
1,0,1
( J+ C4 m- w L) C) p: o: R 1,1,0 |