Jag tycker att det är ganska lättare att specificera de exakta uppsättningarna jag behöver med GROUPING SET-satsen:
WITH data(val1, val2, val3) AS
( SELECT 'a' ,'a-details' ,'1' FROM DUAL
UNION ALL
SELECT 'b' ,'b-details' ,'2' FROM DUAL
UNION ALL
SELECT 'c' ,'c-details' ,'3' FROM DUAL
)
SELECT NVL(val1,'Total Result'),
val2,
SUM(val3) tot
from data
group by grouping sets ((val1, val2),());
Jag misstänker att det är mer effektivt, eftersom det direkt specificerar nivåerna som ska beräknas.
http://sqlfiddle.com/#!4/8301d/3
CUBE och ROLLUP är praktiska för att generera ett stort antal aggregeringsnivåer automatiskt (t.ex. varje nivå i en dimensionshierarki), och det kan finnas ett fall för att använda GROUPING ID om du vill eliminera en liten delmängd av nivåer från en stor CUBE-genererad set, men GROUPING SET är exakt utformad för att specificera särskilda aggregeringsnivåer.