Ik vind het wat gemakkelijker om de exacte sets die ik nodig heb te specificeren met de GROUPING SET-clausule:
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),());
Ik vermoed dat het efficiënter is, omdat het direct de te berekenen niveaus specificeert.
http://sqlfiddle.com/#!4/8301d/3
CUBE en ROLLUP zijn handig voor het automatisch genereren van grote aantallen aggregatieniveaus (bijv. elk niveau in een dimensionale hiërarchie), en er kan een reden zijn om GROUPING ID te gebruiken als u een kleine subset van niveaus uit een grote door CUBE gegenereerde set, maar GROUPING SET is precies ontworpen voor het specificeren van bepaalde aggregatieniveaus.