Ich finde es ziemlich einfacher, die genauen Sätze, die ich brauche, mit der GROUPING SET-Klausel anzugeben:
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),());
Ich vermute, dass es effizienter ist, da es die zu berechnenden Pegel direkt angibt.
http://sqlfiddle.com/#!4/8301d/3
CUBE und ROLLUP sind praktisch, um automatisch eine große Anzahl von Aggregationsebenen zu generieren (z. B. jede Ebene in einer Dimensionshierarchie), und es könnte ein Fall für die Verwendung von GROUPING ID geben, wenn Sie eine kleine Teilmenge von Ebenen aus einem großen CUBE-generierten eliminieren möchten set, aber GROUPING SET ist genau darauf ausgelegt, bestimmte Aggregationsebenen zu spezifizieren.