Dalam Oracle SQL, fungsi group (atau fungsi agregasi) memungkinkan pengguna untuk melakukan perhitungan pada beberapa baris data dan menghasilkan hasil yang terkelompok. Selain klusa GROUP BY standar, Oracle menyediakan operasi pengelompokan lanjutan seperti ROLLUP, CUBE, dan GROUPING SETS untuk menghasilkan subtotal, total keseluruhan, dan agregasi multidimensi. Fungsi-fungsi ini sangat berguna dalam pelaporan, analisis bisnis, dan pengolahan data. 

  1. ROLLUP

ROLLUP digunakan untuk membuat subtotal dan total keseluruhan secara hierarkis, mulai dari level terendah hingga level tertinggi. 

Sintaks pada SQL 

SELECT kolom1, kolom2, fungsi_agregasi(kolom3) 

FROM nama_tabel 

GROUP BY ROLLUP(kolom1, kolom2); 

Contoh: 

Misalkan terdapat table Employee dengan kolom department_id, job_id, dan salary 

SELECT department_id, job_id, SUM(salary) AS total_gaji 

FROM employee 

WHERE department_id < 50 

GROUP BY ROLLUP(department_idjob_id); 

Hasil: 

  • Menampilkan total gaji per kombinasi department_id dan job_id 
  • Menghasilkan total gaji per department_id 
  • Menampilkan total keseluruhan gaji. 

  1. CUBE

CUBE menghasilkan semua kemungkinan kombinasi subtotal, termasuk total keseluruhan. Berbeda dengan ROLLIUP yang hierarkis, CUBE bersifat multidimensi. 

Sintaks pada SQL 

SELECT kolom1, kolom2, fungsi_agregasi(kolom3) 

FROM nama_tabel 

GROUP BY CUBE(kolom1, kolom2); 

Contoh: 

sql 

SELECT department_id, job_id, SUM(salary) AS total_gaji 

FROM employee 

WHERE department_id < 50 

GROUP BY CUBE(department_idjob_id); 

Hasil: 

  • Menghitung total gaji untuk setiap department_id dan job_id 
  • Menghitung total gaji untuk setiap department_id 
  • Menghitung total gaji untuk setiap job_id 
  • Menampilkan total gaji secara keseluruhan. 

  1. GROUPING SETS:PengelompokanFleksibel 

GROUPING SETS memungkinkan pengguna menentukan kombinasi pengelompokan tertentu tanpa harus membuat semua kombinasi seperti CUBE. 

Sintak pada SQL 

SELECT kolom1, kolom2, fungsi_agregasi(kolom3) 

FROM nama_tabel 

GROUP BY GROUPING SETS ( 

    (kolom1, kolom2),   

    (kolom1),    

    (kolom2),           

    ()                  

); 

Contoh: 

SELECT department_id, job_id, SUM(salary) AS total_gaji 

FROM employee 

WHERE department_id < 50 

GROUP BY GROUPING SETS ( 

    (department_id, job_id), 

    (department_id), 

    () 

); 

Hasil: 

  • Hanya menampilkan kombinasi yang ditentukan, tidak semua kombinasi seperti CUBE. 
  • Berguna jika hanya membutuhkan beberapa level agregasi. 
  • Pada contoh artinya menampilkan: 
  • Detail per department_id dan job_id 
  • Subtotal gaji per department_id 
  • Grand Total 
  • Tidak menampilkan subtotal gaji per job_id dikarenakan tidak dipanggil pada atributnya pada query GROUPING SETS tersebut, yang dimana hal ini berbeda dengan CUBE 
  • Kurung kosong “ () “ pada query GROUPING SETS digunakan untuk menampilkan Grand Total 

Referensi: 

  1. Coronel, C., & Morris, S. (2023). Database Systems: Design, Implementation, and Management. Cengage Learning. (Bab 7). 
  2. Oracle Academy. Database Programming with SQL.