Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

fungsi rollup oracle dengan banyak kolom

Saya merasa lebih mudah untuk menentukan set yang tepat yang saya butuhkan dengan klausa SET GROUPING:

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

Saya menduga ini lebih efisien, karena secara langsung menentukan level yang akan dihitung.

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

CUBE dan ROLLUP berguna untuk menghasilkan sejumlah besar level agregasi secara otomatis (mis. setiap level dalam hierarki dimensi), dan mungkin ada kasus untuk menggunakan ID GROUPING jika Anda ingin menghilangkan sebagian kecil level dari CUBE besar yang dihasilkan ditetapkan, tetapi SET PENGELOMPOKAN dirancang secara tepat untuk menentukan tingkat agregasi tertentu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ambil IDENTITAS yang terakhir dimasukkan Oracle

  2. Oracle menggunakan atau mengabaikan kolom yang diindeks tergantung pada format to_date(literal)

  3. Format TANGGAL default Oracle

  4. MySQL:bagaimana melakukan keamanan tingkat baris (seperti Oracle's Virtual Private Database)?

  5. Apakah mungkin menggunakan GROUP BY dengan variabel bind?