Materi
Laporan gudang data sering mengikuti hierarki dimensi: total per subkategori, subtotal per kategori, dan total keseluruhan di baris terakhir. Microsoft menyebut proses menaikkan fakta dari tingkat terendah ke tingkat lebih tinggi sebagai rollup. Dokumentasi PostgreSQL menyediakan klausa untuk itu. GROUPING SETS mengelompokkan data yang sama menurut beberapa kumpulan kolom sekaligus dan menggabungkan hasilnya; kolom yang tidak ikut di suatu kumpulan bernilai NULL di baris hasilnya. ROLLUP (a, b) adalah singkatan untuk GROUPING SETS ((a, b), (a), ()), yaitu daftar kolomnya beserta semua awalannya, termasuk kumpulan kosong yang menghasilkan total keseluruhan.
-- PostgreSQL: subtotal per jenis kendaraan dan total bengkel
SELECT jenis, merek, SUM(biaya)
FROM servis_rata
GROUP BY ROLLUP (jenis, merek);Diagram SELECT di dokumentasi SQLite tidak memuat ROLLUP maupun GROUPING SETS, jadi hasil yang sama disusun dengan compound SELECT. Setiap kumpulan pengelompokan ditulis sebagai satu SELECT, lalu digabung dengan UNION ALL, yang mengembalikan semua baris dari kedua sisinya tanpa membuang duplikat. Semua SELECT harus menghasilkan jumlah kolom yang sama, dan ORDER BY hanya boleh di akhir seluruh gabungan. Kolom yang tidak dikelompokkan diisi label teks, misalnya Semua, supaya baris subtotal mudah dikenali.
-- SQLite: padanan ROLLUP (jenis, merek)
SELECT jenis, merek, SUM(biaya) FROM servis_rata GROUP BY jenis, merek
UNION ALL
SELECT jenis, 'Semua', SUM(biaya) FROM servis_rata GROUP BY jenis
UNION ALL
SELECT 'Semua', 'Semua', SUM(biaya) FROM servis_rata;