Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Rollup-Funktion mit mehreren Spalten

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.