Uważam, że łatwiej jest określić dokładne zestawy, których potrzebuję, za pomocą klauzuli 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),());
Podejrzewam, że jest bardziej wydajny, ponieważ bezpośrednio określa poziomy do obliczenia.
http://sqlfiddle.com/#!4/8301d/3
CUBE i ROLLUP są przydatne do automatycznego generowania dużej liczby poziomów agregacji (np. każdy poziom w hierarchii wymiarowej) i może zaistnieć przypadek użycia GROUPING ID, jeśli chcesz wyeliminować mały podzbiór poziomów z dużego wygenerowanego przez moduł CUBE zestaw, ale ZESTAW GRUPOWANIA jest precyzyjnie zaprojektowany do określania określonych poziomów agregacji.