sql >> Database teknologi >  >> RDS >> Oracle

Oracle rollup funktion med flere kolonner

Jeg finder det noget lettere at specificere de nøjagtige sæt, jeg har brug for, med GROUPING SET-sætningen:

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),());

Jeg formoder, at det er mere effektivt, da det direkte specificerer de niveauer, der skal beregnes.

http://sqlfiddle.com/#!4/8301d/3

CUBE og ROLLUP er praktiske til automatisk at generere et stort antal aggregeringsniveauer (f.eks. hvert niveau i et dimensionshierarki), og der kan være et argument for at bruge GRUPPERINGS-ID, hvis du vil fjerne en lille delmængde af niveauer fra en stor CUBE-genereret sæt, men GROUPING SET er præcist designet til at specificere bestemte aggregeringsniveauer.



  1. FieldShield SDK

  2. MySQL ODBC 5.1 Sæt navne er ikke tilladt af driveren

  3. Oracle LISTAGG() for flere attributter?

  4. Array datatype, opdelt streng,