Group Functions Lanjutan di Oracle: ROLLUP, CUBE, dan GROUPING SETS
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.
- 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_id, job_id);
Hasil:
- Menampilkan total gaji per kombinasi department_id dan job_id
- Menghasilkan total gaji per department_id
- Menampilkan total keseluruhan gaji.

- 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_id, job_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.

- 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:
- Coronel, C., & Morris, S. (2023). Database Systems: Design, Implementation, and Management. Cengage Learning. (Bab 7).
- Oracle Academy. Database Programming with SQL.