sql >> Database >  >> RDS >> Oracle

oracle rollup-functie met meerdere kolommen

Ik vind het wat gemakkelijker om de exacte sets die ik nodig heb te specificeren met de GROUPING SET-clausule:

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

Ik vermoed dat het efficiënter is, omdat het direct de te berekenen niveaus specificeert.

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

CUBE en ROLLUP zijn handig voor het automatisch genereren van grote aantallen aggregatieniveaus (bijv. elk niveau in een dimensionale hiërarchie), en er kan een reden zijn om GROUPING ID te gebruiken als u een kleine subset van niveaus uit een grote door CUBE gegenereerde set, maar GROUPING SET is precies ontworpen voor het specificeren van bepaalde aggregatieniveaus.



  1. hoe csv naar tabel in oracle te converteren

  2. hoe het aantal dagen in de maand in mysql te vinden

  3. Kan geen verbinding maken met MySQL vanuit Java:NullPointerException in verbindingslogica van MySQL-stuurprogramma

  4. Bestellen op tekenreeks die begint met nummer - ActiveRecord