0Pricing
SQL Academy · Pelajaran

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 NULL pada 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

  1. Melampaui Satu GROUP BY
  2. ROLLUP untuk Subtotal
  3. CUBE untuk Semua Kombinasi
  4. Penjelasan GROUPING SETS
← Kembali ke SQL Academy