Považuji za snazší specifikovat přesné sady, které potřebuji, pomocí klauzule GROUPING SET:
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),());
Mám podezření, že je efektivnější, protože přímo určuje úrovně, které se mají vypočítat.
http://sqlfiddle.com/#!4/8301d/3
CUBE a ROLLUP jsou užitečné pro automatické generování velkého počtu agregačních úrovní (např. každá úroveň v dimenzionální hierarchii) a může nastat případ použití GROUPING ID, pokud chcete eliminovat malou podmnožinu úrovní z velké CUBE generované set, ale GROUPING SET je přesně navržen pro specifikaci konkrétních úrovní agregace.