Me resulta bastante más fácil especificar los conjuntos exactos que necesito con la cláusula 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),());
Sospecho que es más eficiente, ya que especifica directamente los niveles a calcular.
http://sqlfiddle.com/#!4/8301d/3
CUBE y ROLLUP son útiles para generar una gran cantidad de niveles de agregación automáticamente (p. ej., todos los niveles en una jerarquía dimensional), y podría haber un caso para usar GROUPING ID si desea eliminar un pequeño subconjunto de niveles de una gran cantidad generada por CUBE. conjunto, pero GROUPING SET está diseñado precisamente para especificar niveles de agregación particulares.