ROLLUP untuk Subtotal
Hitung subtotal berjalan dan total keseluruhan.
ROLLUP untuk Subtotal adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu ROLLUP?
Saat Anda mengelompokkan data dengan GROUP BY, Anda mendapatkan satu baris untuk setiap kelompok. Namun, sering kali Anda juga menginginkan subtotal untuk setiap kelompok dan total keseluruhan untuk semua baris. Itulah yang dilakukan ROLLUP.
ROLLUP adalah ekstensi GROUP BY yang secara otomatis menambahkan baris ringkasan tambahan ke kumpulan hasil Anda, sehingga memberikan subtotal berjalan pada setiap tingkat hierarki pengelompokan dan total keseluruhan terakhir di bagian akhir.
Menyiapkan Data Contoh
Mari kita buat tabel penjualan sederhana untuk berlatih. Tabel ini menyimpan wilayah, kategori produk, dan jumlah penjualan untuk setiap transaksi. Jalankan pernyataan di bawah untuk membuat dan mengisinya.
CREATE TABLE sales (
region TEXT,
category TEXT,
amount NUMERIC
);
INSERT INTO sales VALUES
('East', 'Electronics', 500),
('East', 'Electronics', 300),
('East', 'Clothing', 150),
('West', 'Electronics', 700),
('West', 'Clothing', 200),
('West', 'Clothing', 100);GROUP BY Biasa Dahulu
Sebelum menggunakan ROLLUP, mari kita lihat hasil yang diberikan GROUP BY biasa. Kueri di bawah mengembalikan satu total untuk setiap pasangan (wilayah, kategori) — tanpa subtotal dan tanpa total keseluruhan.
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY region, category
ORDER BY region, category;Memperkenalkan GROUP BY ROLLUP
Ganti GROUP BY dengan GROUP BY ROLLUP(...), lalu SQL akan menambahkan baris subtotal secara otomatis. Kolom di dalam ROLLUP() membentuk hierarki, dan subtotal dihasilkan untuk setiap tingkat hierarki tersebut, ditambah satu total keseluruhan terakhir.
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region, category)
ORDER BY region, category;Membaca Keluaran ROLLUP
Hasil ROLLUP berisi tiga jenis baris:
- Baris detail — satu baris untuk setiap kombinasi (wilayah, kategori), sama seperti GROUP BY biasa.
- Baris subtotal — satu baris untuk setiap wilayah dengan
category = NULL, yang menampilkan total wilayah tersebut. - Baris total keseluruhan — satu baris dengan
NULLpada region dan category, yang menampilkan total keseluruhan.
Nilai NULL berfungsi sebagai penanda yang menunjukkan tingkat yang diringkas.
Menggunakan COALESCE untuk Memberi Label pada NULL
Penanda NULL dapat terlihat membingungkan bagi pengguna akhir. Bungkus setiap kolom dengan COALESCE untuk menggantinya dengan label yang bermakna, seperti 'Semua Kategori' dan 'Total Keseluruhan'.
SELECT
COALESCE(region, 'Grand Total') AS region,
COALESCE(category, 'All Categories') AS category,
SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region, category)
ORDER BY region, category;ROLLUP Satu Kolom
ROLLUP juga dapat digunakan hanya dengan satu kolom. Saat menulis ROLLUP(region), Anda mendapatkan satu baris untuk setiap wilayah, ditambah satu baris total keseluruhan di bagian akhir. Ini adalah bentuk paling sederhana dan berguna untuk laporan apa pun yang memerlukan total berjalan di bawah baris detail.
SELECT
COALESCE(region, 'Grand Total') AS region,
SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region)
ORDER BY region;ROLLUP Tiga Tingkat
Anda dapat memberikan tiga kolom atau lebih kepada ROLLUP untuk membangun hierarki yang lebih dalam. Dengan ROLLUP(year, region, category), Anda akan mendapatkan subtotal per tahun+wilayah, subtotal per tahun, dan total keseluruhan — setiap kolom tambahan menambahkan satu tingkat peringkasan.
-- Extend the demo with a year column
SELECT
COALESCE(CAST(yr AS TEXT), 'All Years') AS year,
COALESCE(region, 'All Regions') AS region,
COALESCE(category, 'All Categories') AS category,
SUM(amount) AS total
FROM (
SELECT 2024 AS yr, region, category, amount FROM sales
UNION ALL
SELECT 2025 AS yr, region, category, amount FROM sales
) t
GROUP BY ROLLUP(yr, region, category)
ORDER BY yr, region, category;Mendeteksi Baris Ringkasan dengan Pengelompokan()
Fungsi pengelompokan() mengembalikan 1 ketika nilai kolom pada baris tersebut adalah NULL yang dihasilkan ROLLUP (penanda ringkasan), dan 0 ketika nilai tersebut merupakan nilai data yang sebenarnya. Dengan demikian, Anda dapat membedakan data NULL yang sebenarnya dari NULL ringkasan rollup.
SELECT
region,
category,
SUM(amount) AS total,
GROUPING(region) AS is_region_summary,
GROUPING(category) AS is_cat_summary
FROM sales
GROUP BY ROLLUP(region, category)
ORDER BY region, category;Menyaring Baris Ringkasan
Karena ROLLUP menambahkan baris setelah agregasi, Anda tidak dapat menyaringnya dengan WHERE. Gunakan HAVING atau bungkus seluruh kueri dalam subkueri. Contoh di bawah hanya mempertahankan subtotal wilayah (baris ketika category adalah NULL dari ROLLUP, sedangkan region memiliki nilai sebenarnya).
SELECT region, SUM(amount) AS regional_total
FROM sales
GROUP BY ROLLUP(region, category)
HAVING GROUPING(category) = 1
AND GROUPING(region) = 0
ORDER BY region;ROLLUP dibandingkan Pengelompokan SETS
ROLLUP(a, b) adalah bentuk singkat dari set GROUPING SETS tertentu. Kedua kueri di bawah ini sepenuhnya setara — ROLLUP hanya menyelamatkan Anda dari keharusan menulis setiap tingkat pengelompokan secara manual.
-- Using ROLLUP (concise)
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region, category);
-- Equivalent explicit GROUPING SETS
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS(
(region, category),
(region),
()
);Pemeriksaan Singkat
Uji pemahaman Anda tentang ROLLUP melalui pertanyaan ini.
Ringkasan Pelajaran
Kerja bagus! Berikut ringkasan hal-hal yang telah Anda pelajari tentang ROLLUP:
- GROUP BY ROLLUP(a, b) secara otomatis menghasilkan subtotal untuk setiap tingkat hierarki kolom dan total keseluruhan untuk semua baris.
- Baris ringkasan ditandai dengan NULL pada kolom yang digulung. Gunakan COALESCE untuk memberinya label yang mudah dibaca.
- Fungsi pengelompokan() mengembalikan 1 untuk NULL yang dihasilkan ROLLUP dan 0 untuk nilai data sebenarnya, sehingga Anda dapat membedakan keduanya.
- Gunakan HAVING GROUPING(...) = 1 untuk menyaring hanya baris ringkasan.
- ROLLUP(a, b) adalah bentuk singkat dari GROUPING SETS((a, b), (a), ()).
ROLLUP adalah alat andalan setiap kali laporan Anda memerlukan subtotal dan total keseluruhan tanpa harus menulis kueri UNION yang rumit.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “ROLLUP untuk Subtotal” gratis?
Ya — teks lengkap “ROLLUP untuk Subtotal” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “ROLLUP untuk Subtotal”?
Hitung subtotal berjalan dan total keseluruhan. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “ROLLUP untuk Subtotal” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Melampaui Satu GROUP BY
- ROLLUP untuk Subtotal
- CUBE untuk Semua Kombinasi
- Penjelasan GROUPING SETS