Acho muito mais fácil especificar os conjuntos exatos que preciso com a 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),());
Suspeito que seja mais eficiente, pois especifica diretamente os níveis a serem calculados.
http://sqlfiddle.com/#!4/8301d/3
CUBE e ROLLUP são úteis para gerar um grande número de níveis de agregação automaticamente (por exemplo, todos os níveis em uma hierarquia dimensional), e pode haver um caso para usar GROUPING ID se você quiser eliminar um pequeno subconjunto de níveis de um grande CUBE gerado set, mas GROUPING SET foi projetado precisamente para especificar níveis de agregação específicos.