0% found this document useful (0 votes)
106 views

Oracle-Base - Rollup, Cube, Grouping Functions and Grouping Sets

hi

Uploaded by

Manu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
106 views

Oracle-Base - Rollup, Cube, Grouping Functions and Grouping Sets

hi

Uploaded by

Manu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 27

3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

Home(/)Articles(/articles)Misc(/articles/misc)Here

ROLLUP,CUBE,GROUPINGFunctionsand
GROUPINGSETS
Thisarticlegivesanoverviewofthefunctionalityavailableforaggregationindata
warehouses,focusingspecificallyontheinformationrequiredfortheOracle
DatabaseSQLExpert(1Z0047)(http://education.oracle.com/pls/web_prodplq
dad/db_pages.getpage?
page_id=41&p_org_id=1001&lang=US&p_exam_id=1Z0_047)exam. Machine Learning eBook
Basics To Advanced Techniques.
Setup Get Access To Examples, Videos
GROUPBY & More. Then Try MATLAB

ROLLUP
CUBE
GROUPINGFunctions
GROUPINGFunction
GROUPING_IDFunction
GROUP_IDFunction
GROUPINGSETS
CompositeColumns
ConcatenatedGroupings

Formoreinformationsee:

GROUPBY,ROLLUPandCUBEinOracle(https://www.youtube.com/watch?v=CCm4IYNtfw)

Setup
Theexamplesinthisarticlewillberunagainstthefollowingsimpledimensiontable.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 1/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

DROPTABLEdimension_tab;
CREATETABLEdimension_tab(
fact_1_idNUMBERNOTNULL,
fact_2_idNUMBERNOTNULL,
fact_3_idNUMBERNOTNULL,
fact_4_idNUMBERNOTNULL,
sales_valueNUMBER(10,2)NOTNULL
);

INSERTINTOdimension_tab
SELECTTRUNC(DBMS_RANDOM.value(low=>1,high=>3))ASfact_1_id,
TRUNC(DBMS_RANDOM.value(low=>1,high=>6))ASfact_2_id,
TRUNC(DBMS_RANDOM.value(low=>1,high=>11))ASfact_3_id,
TRUNC(DBMS_RANDOM.value(low=>1,high=>11))ASfact_4_id,
ROUND(DBMS_RANDOM.value(low=>1,high=>100),2)ASsales_value
FROMdual
CONNECTBYlevel<=1000;
COMMIT;

TokeepthequeriesandtheiroutputsimpleIamgoingtoignorethefacttablesandalsolimitthenumberofdistinctvaluesinthe
columnsofthedimensiontable.

GROUPBY
Let'sstartberemindingourselveshowthe GROUPBY clauseworks.Anaggregatefunctiontakesmultiplerowsofdatareturnedbya
queryandaggregatesthemintoasingleresultrow.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 2/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTSUM(sales_value)ASsales_value
FROMdimension_tab;

SALES_VALUE

50528.39

1rowselected.

SQL>

Includingthe GROUPBY clauselimitsthewindowofdataprocessedbytheaggregatefunction.Thiswaywegetanaggregatedvalue


foreachdistinctcombinationofvaluespresentinthecolumnslistedinthe GROUPBY clause.Thenumberofrowsweexpectcanbe
calculatedbymultiplyingthenumberofdistinctvaluesofeachcolumnlistedinthe GROUPBY clause.Inthiscase,iftherowswere
loadedrandomlywewouldexpectthenumberofdistinctvaluesforthefirstthreecolumnsinthetabletobe2,5and10respectively.
Sousingthe fact_1_id columninthe GROUPBY clauseshouldgiveus2rows.

SELECTfact_1_id,
COUNT(*)ASnum_rows,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYfact_1_id
ORDERBYfact_1_id;

FACT_1_IDNUM_ROWSSALES_VALUE

147824291.35
252226237.04

2rowsselected.

SQL>

Includingthefirsttwocolumnsinthe GROUPBY clauseshouldgiveus10rows(2*5),eachwithitsaggregatedvalues. Translate


https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 3/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
COUNT(*)ASnum_rows,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYfact_1_id,fact_2_id
ORDERBYfact_1_id,fact_2_id;

FACT_1_IDFACT_2_IDNUM_ROWSSALES_VALUE

11834363.55
12964794.76
13934718.25
141055387.45
151015027.34
211095652.84
22964583.02
231105555.77
241135936.67
25944508.74

10rowsselected.

SQL>

Includingthefirstthreecolumnsinthe GROUPBY clauseshouldgiveus100rows(2*5*10).

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 4/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
fact_3_id,
COUNT(*)ASnum_rows,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYfact_1_id,fact_2_id,fact_3_id
ORDERBYfact_1_id,fact_2_id,fact_3_id;

FACT_1_IDFACT_2_IDFACT_3_IDNUM_ROWSSALES_VALUE

11110381.61
1126235.29
1137270.7
11413634.05
11510602.36
1167538.41
1175245.87
1188435.54
1198506.59
11109513.13
...
25114714.84
25213686.56
25313579.5
25410336.87
2555215.17
2564268.72
25714667.22
2587451.29
2598365.24
25106223.33

100rowsselected.
Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 5/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS


SQL>

ROLLUP
Inadditiontotheregularaggregationresultsweexpectfromthe GROUPBY clause,the ROLLUP extensionproducesgroupsubtotals
fromrighttoleftandagrandtotal.If"n"isthenumberofcolumnslistedinthe ROLLUP ,therewillben+1levelsofsubtotals.

SELECTfact_1_id,
fact_2_id,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYROLLUP(fact_1_id,fact_2_id)
ORDERBYfact_1_id,fact_2_id;

FACT_1_IDFACT_2_IDSALES_VALUE

114363.55
124794.76
134718.25
145387.45
155027.34
124291.35
215652.84
224583.02
235555.77
245936.67
254508.74
226237.04
50528.39

13rowsselected.

SQL>
Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 6/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

LookingattheoutputinaSQL*Plusoragridoutput,youcanvisuallyidentifytherowscontainingsubtotalsastheyhavenullvalues
inthe ROLLUP columns.Itmaybeeasiertospotwhenscanningdowntheoutputofthefollowingqueryshownhere(rollup.txt).
Obviously,iftherawdatacontainsnullvalues,usingthisvisualidentificationisnotanaccurateapproach,butwewilldiscussthis
issuelater.

SELECTfact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYROLLUP(fact_1_id,fact_2_id,fact_3_id)
ORDERBYfact_1_id,fact_2_id,fact_3_id;

Itispossibletodoapartialrolluptoreducethenumberofsubtotalscalculated.Theoutputfromthefollowingpartialrollupisshown
here(rolluppartial.txt).

SELECTfact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYfact_1_id,ROLLUP(fact_2_id,fact_3_id)
ORDERBYfact_1_id,fact_2_id,fact_3_id;

CUBE
Inadditiontothesubtotalsgeneratedbythe ROLLUP extension,the CUBE extensionwillgeneratesubtotalsforallcombinationsof
thedimensionsspecified.If"n"isthenumberofcolumnslistedinthe CUBE ,therewillbe2nsubtotalcombinations.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 7/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYCUBE(fact_1_id,fact_2_id)
ORDERBYfact_1_id,fact_2_id;

FACT_1_IDFACT_2_IDSALES_VALUE

114363.55
124794.76
134718.25
145387.45
155027.34
124291.35
215652.84
224583.02
235555.77
245936.67
254508.74
226237.04
110016.39
29377.78
310274.02
411324.12
59536.08
50528.39

18rowsselected.

SQL>

Asthenumberofdimensionsincrease,sodothecombinationsofsubtotalsthatneedtobecalculated,asshownbytheoutputofthe
followingquery,shownhere(cube.txt).
Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 8/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYCUBE(fact_1_id,fact_2_id,fact_3_id)
ORDERBYfact_1_id,fact_2_id,fact_3_id;

Itispossibletodoapartialcubetoreducethenumberofsubtotalscalculated.Theoutputfromthefollowingpartialcubeisshown
here(cubepartial.txt).

SELECTfact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value)ASsales_value
FROMdimension_tab
GROUPBYfact_1_id,CUBE(fact_2_id,fact_3_id)
ORDERBYfact_1_id,fact_2_id,fact_3_id;

GROUPINGFunctions

GROUPING
Itcanbequiteeasytovisuallyidentifysubtotalsgeneratedbyrollupsandcubes,buttodoitprogramaticallyyoureallyneed
somethingmoreaccuratethanthepresenceofnullvaluesinthegroupingcolumns.Thisiswherethe GROUPING functioncomesin.It
acceptsasinglecolumnasaparameterandreturns"1"ifthecolumncontainsanullvaluegeneratedaspartofasubtotalbya
ROLLUP or CUBE operationor"0"foranyothervalue,includingstorednullvalues.

Thefollowingqueryisarepeatofapreviouscube,butthe GROUPING functionhasbeenaddedforeachofthedimensionsinthe


cube.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 9/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
SUM(sales_value)ASsales_value,
GROUPING(fact_1_id)ASf1g,
GROUPING(fact_2_id)ASf2g
FROMdimension_tab
GROUPBYCUBE(fact_1_id,fact_2_id)
ORDERBYfact_1_id,fact_2_id;

FACT_1_IDFACT_2_IDSALES_VALUEF1GF2G

114363.5500
124794.7600
134718.2500
145387.4500
155027.3400
124291.3501
215652.8400
224583.0200
235555.7700
245936.6700
254508.7400
226237.0401
110016.3910
29377.7810
310274.0210
411324.1210
59536.0810
50528.3911

18rowsselected.

SQL>

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 10/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

Fromthiswecansee:

F1G=0,F2G=0:Representsarowcontainingregularsubtotalwewouldexpectfroma GROUPBY operation.


F1G=0,F2G=1:Representsarowcontainingasubtotalforadistinctvalueofthe FACT_1_ID column,asgeneratedby ROLLUP
and CUBE operations.
F1G=1,F2G=0:Representsarowcontainingasubtotalforadistinctvalueofthe FACT_2_ID column,whichwewouldonlysee
ina CUBE operation.
F1G=1,F2G=1:Representsarowcontainingagrandtotalforthequery,asgeneratedby ROLLUP and CUBE operations.

Itwouldnowbeeasytowriteaprogramtoaccuratelyprocessthedata.

The GROUPING columnscanusedfororderingorfilteringresults.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 11/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
SUM(sales_value)ASsales_value,
GROUPING(fact_1_id)ASf1g,
GROUPING(fact_2_id)ASf2g
FROMdimension_tab
GROUPBYCUBE(fact_1_id,fact_2_id)
HAVINGGROUPING(fact_1_id)=1ORGROUPING(fact_2_id)=1
ORDERBYGROUPING(fact_1_id),GROUPING(fact_2_id);

FACT_1_IDFACT_2_IDSALES_VALUEF1GF2G

124291.3501
226237.0401
411324.1210
310274.0210
29377.7810
110016.3910
59536.0810
50528.3911

8rowsselected.

SQL>

GROUPING_ID
The GROUPING_ID functionprovidesanalternateandmorecompactwaytoidentifysubtotalrows.Passingthedimensioncolumnsas
arguments,itreturnsanumberindicatingthe GROUPBY level.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 12/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id)ASgrouping_id
FROMdimension_tab
GROUPBYCUBE(fact_1_id,fact_2_id)
ORDERBYfact_1_id,fact_2_id;

FACT_1_IDFACT_2_IDSALES_VALUEGROUPING_ID

114363.550
124794.760
134718.250
145387.450
155027.340
124291.351
215652.840
224583.020
235555.770
245936.670
254508.740
226237.041
110016.392
29377.782
310274.022
411324.122
59536.082
50528.393

18rowsselected.

SQL>

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 13/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

GROUP_ID
It'spossibletowritequeriesthatreturntheduplicatesubtotals,whichcanbealittleconfusing.The GROUP_ID functionassignsthe
value"0"tothefirstset,andallsubsequentsetsgetassignedahighernumber.Thefollowingqueryforcesduplicatestoshowthe
GROUP_ID functioninaction.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 14/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id)ASgrouping_id,
GROUP_ID()ASgroup_id
FROMdimension_tab
GROUPBYGROUPINGSETS(fact_1_id,CUBE(fact_1_id,fact_2_id))
ORDERBYfact_1_id,fact_2_id;

FACT_1_IDFACT_2_IDSALES_VALUEGROUPING_IDGROUP_ID

114363.5500
124794.7600
134718.2500
145387.4500
155027.3400
124291.3511
124291.3510
215652.8400
224583.0200
235555.7700
245936.6700
254508.7400
226237.0411
226237.0410
110016.3920
29377.7820
310274.0220
411324.1220
59536.0820
50528.3930

20rowsselected.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 15/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS


SQL>

Ifnecessary,youcouldthenfiltertheresultsusingthegroup.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 16/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id)ASgrouping_id,
GROUP_ID()ASgroup_id
FROMdimension_tab
GROUPBYGROUPINGSETS(fact_1_id,CUBE(fact_1_id,fact_2_id))
HAVINGGROUP_ID()=0
ORDERBYfact_1_id,fact_2_id;

FACT_1_IDFACT_2_IDSALES_VALUEGROUPING_IDGROUP_ID

114363.5500
124794.7600
134718.2500
145387.4500
155027.3400
124291.3510
215652.8400
224583.0200
235555.7700
245936.6700
254508.7400
226237.0410
110016.3920
29377.7820
310274.0220
411324.1220
59536.0820
50528.3930

18rowsselected.

SQL>
Translate
GROUPINGSETS
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 17/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

GROUPINGSETS
Calculatingallpossiblesubtotalsinacube,especiallythosewithmanydimensions,canbequiteanintensiveprocess.Ifyoudon't
needallthesubtotals,thiscanrepresentaconsiderableamountofwastedeffort.Thefollowingcubewiththreedimensionsgives8
levelsofsubtotals(GROUPING_ID:07),shownhere(groupingsetscube.txt).

SELECTfact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id,fact_3_id)ASgrouping_id
FROMdimension_tab
GROUPBYCUBE(fact_1_id,fact_2_id,fact_3_id)
ORDERBYfact_1_id,fact_2_id,fact_3_id;

Ifweonlyneedafewoftheselevelsofsubtotalingwecanusethe GROUPINGSETS expressionandspecifyexactlywhichoneswe


need,savingushavingtocalculatethewholecube.Inthefollowingqueryweareonlyinterestedinsubtotalsforthe" FACT_1_ID,
FACT_2_ID "and" FACT_1_ID,FACT_3_ID "groups.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 18/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id,fact_3_id)ASgrouping_id
FROMdimension_tab
GROUPBYGROUPINGSETS((fact_1_id,fact_2_id),(fact_1_id,fact_3_id))
ORDERBYfact_1_id,fact_2_id,fact_3_id;

FACT_1_IDFACT_2_IDFACT_3_IDSALES_VALUEGROUPING_ID

114363.551
124794.761
134718.251
145387.451
155027.341
112737.42
121854.292
132090.962
142605.172
152590.932
162506.92
171839.852
182953.042
192778.752
1102334.062
215652.841
224583.021
235555.771
245936.671
254508.741
213512.692
222847.942
232972.52
Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 19/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

242534.062
253115.992
262775.852
272208.192
282358.552
291884.112
2102027.162

30rowsselected.

SQL>

Noticehowwehavegonefromreturning198rowswith8subtotallevelsinthecube,tojust30rowswith2subtotallevels.

CompositeColumns
ROLLUP and CUBE considereachcolumnindependentlywhendecidingwhichsubtotalsmustbecalculated.For ROLLUP thismeans
steppingbackthroughthelisttodeterminethegroupings.

ROLLUP(a,b,c)
(a,b,c)
(a,b)
(a)
()

CUBE createsagroupingforeverypossiblecombinationofcolumns.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 20/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

CUBE(a,b,c)
(a,b,c)
(a,b)
(a,c)
(a)
(b,c)
(b)
(c)
()

Compositecolumnsallowcolumnstobegroupedtogetherwithbracessotheyaretreatedasasingleunitwhendeterminingthe
necessarygroupings.Inthefollowing ROLLUP columns"a"and"b"havebeenturnedintoacompositecolumnbytheadditional
braces.Asaresultthegroupof"a"isnotlongercalculatedasthecolumn"a"isonlypresentaspartofthecompositecolumninthe
statement.

ROLLUP((a,b),c)
(a,b,c)
(a,b)
()

Notconsidered:
(a)

Inasimilarway,thepossiblecombinationsofthefollowing CUBE arereducedbecausereferencesto"a"or"b"individuallyarenot


consideredastheyaretreatedasasinglecolumnwhenthegroupingsaredetermined.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 21/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

CUBE((a,b),c)
(a,b,c)
(a,b)
(c)
()

Notconsidered:
(a,c)
(a)
(b,c)
(b)

Theimpactofthisisshownclearlyinthefollowtwostatements,whoseoutputisshownhere(compositecolumn1.txt)andhere
(compositecolumn2.txt).Theregularcubereturns198rowsand8groups(07),whilethecubewiththecompositecolumnreturns
only121rowswith4groups(0,1,6,7)

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 22/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

RegularCube.
SELECTfact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id,fact_3_id)ASgrouping_id
FROMdimension_tab
GROUPBYCUBE(fact_1_id,fact_2_id,fact_3_id)
ORDERBYfact_1_id,fact_2_id,fact_3_id;

Cubewithcompositecolumn.
SELECTfact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id,fact_3_id)ASgrouping_id
FROMdimension_tab
GROUPBYCUBE((fact_1_id,fact_2_id),fact_3_id)
ORDERBYfact_1_id,fact_2_id,fact_3_id;

ConcatenatedGroupings
Concatenatedgroupingsaredefinedbyputtingtogethermultiple GROUPINGSETS , CUBE sor ROLLUP sseparatedbycommas.The
resultinggroupingsarethecrossproductofallthegroupsproducedbytheindividualgroupingsets.Itmightbealittleeasierto
understandwhatthismeansbylookingatanexample.Thefollowing GROUPINGSET resultsin2groupsofsubtotals,oneforthe
fact_1_id columnandoneforthe fact_id_2 column.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 23/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_1_id,
fact_2_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id)ASgrouping_id
FROMdimension_tab
GROUPBYGROUPINGSETS(fact_1_id,fact_2_id)
ORDERBYfact_1_id,fact_2_id;

FACT_1_IDFACT_2_IDSALES_VALUEGROUPING_ID

124291.351
226237.041
110016.392
29377.782
310274.022
411324.122
59536.082

7rowsselected.

SQL>

Thenext GROUPINGSET resultsinanother2groupsofsubtotals,oneforthe fact_3_id columnandoneforthe fact_4_id column.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 24/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

SELECTfact_3_id,
fact_4_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_3_id,fact_4_id)ASgrouping_id
FROMdimension_tab
GROUPBYGROUPINGSETS(fact_3_id,fact_4_id)
ORDERBYfact_3_id,fact_4_id;

FACT_3_IDFACT_4_IDSALES_VALUEGROUPING_ID

16250.091
24702.231
35063.461
45139.231
55706.921
65282.751
74048.041
85311.591
94662.861
104361.221
14718.552
25439.12
34643.42
44515.32
55110.272
65910.782
74987.222
84846.252
95458.822
104898.72

20rowsselected.

SQL>
Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 25/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

Ifwecombinethemtogetherintoaconcatenatedgroupingweget4groupsofsubtotals.Theoutputofthefollowingqueryisshown
here(concatenatedgroupings.txt).

SELECTfact_1_id,
fact_2_id,
fact_3_id,
fact_4_id,
SUM(sales_value)ASsales_value,
GROUPING_ID(fact_1_id,fact_2_id,fact_3_id,fact_4_id)ASgrouping_id
FROMdimension_tab
GROUPBYGROUPINGSETS(fact_1_id,fact_2_id),GROUPINGSETS(fact_3_id,fact_4_id)
ORDERBYfact_1_id,fact_2_id,fact_3_id,fact_4_id;

Theoutputfromthepreviousthreequeriesproducethefollowinggroupings.

GROUPINGSETS(fact_1_id,fact_2_id)
(fact_1_id)
(fact_2_id)

GROUPINGSETS(fact_3_id,fact_4_id)
(fact_3_id)
(fact_4_id)

GROUPINGSETS(fact_1_id,fact_2_id),GROUPINGSETS(fact_3_id,fact_4_id)
(fact_1_id,fact_3_id)
(fact_1_id,fact_4_id)
(fact_2_id,fact_3_id)
(fact_2_id,fact_4_id)

Sowecanseethefinalcrossproductofthetwo GROUPINGSETS thatmakeuptheconcatenatedgrouping.Agenericsummary


wouldbeasfollows.

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 26/27
3/24/2017 ORACLEBASEROLLUP,CUBE,GROUPINGFunctionsandGROUPINGSETS

GROUPINGSETS(a,b),GROUPINGSETS(c,d)
(a,c)
(a,d)
(b,c)
(b,d)

Formoreinformationsee:

GROUPBY,ROLLUPandCUBEinOracle(https://www.youtube.com/watch?v=CCm4IYNtfw)
SQLforAggregationinDataWarehouses(http://docs.oracle.com/cd/E11882_01/server.112/e25554/aggreg.htm)

Hopethishelps.RegardsTim...

BacktotheTop.

18comments,read/addthem...(/misc/comments?page_id=940)

Home(/)|Articles(/articles/articles)|Scripts(/dba/scripts)|Blog(/blog/)|Certification(/misc/ocpcertification)|Misc
(/misc/miscellaneous)|About(/misc/siteinfo)

AboutTimHall(/misc/siteinfo#biog)
Copyright&Disclaimer(/misc/siteinfo#copyright)

Translate
https://oraclebase.com/articles/misc/rollupcubegroupingfunctionsandgroupingsets#grouping_functions 27/27

You might also like