Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle rollup функция с множество колони

Намирам за доста по-лесно да посоча точните набори, от които се нуждая, с клаузата 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),());

Подозирам, че е по-ефективен, тъй като директно указва нивата за изчисляване.

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

CUBE и ROLLUP са удобни за автоматично генериране на голям брой нива на агрегиране (напр. всяко ниво в йерархия на измерения) и може да има случай за използване на GROUPING ID, ако искате да елиминирате малък поднабор от нива от голям, генериран от CUBE набор, но GROUPING SET е точно проектиран за указване на определени нива на агрегиране.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Метод за събиране:Процедура за отрязване в базата данни на Oracle

  2. Много бавна производителност в Django с отдалечен сървър на Oracle

  3. Как да съхраня резултат от функция, която ще върне sysrefcursor?

  4. Spring Data JPA, извикваща Oracle функция

  5. Oracle заявка бавна с REGEXP_SUBSTR(AGGREGATOR,'[^;]+',1,LEVEL)