0Pricing
SQL Academy · Pelajaran

Penjelasan GROUPING SETS

Pilih tepat pengelompokan yang Anda inginkan.

Penjelasan GROUPING SETS adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 SET PENGELOMPOKAN?

Ketika Anda menulis klausa GROUP BY, Anda menentukan satu set kolom untuk dikelompokkan. Namun, terkadang Anda memerlukan beberapa pengelompokan berbeda dalam satu kueri—tanpa menjalankan kueri beberapa kali dan menggunakan UNION ALL.

SET PENGELOMPOKAN memungkinkan Anda menentukan pengelompokan yang diinginkan secara tepat, semuanya dalam satu kali pemindaian data. Setiap set dalam daftar menghasilkan baris agregatnya sendiri dalam hasil.

Tabel Contoh: penjualan

Kita akan menggunakan tabel penjualan sepanjang pelajaran ini. Tabel tersebut mencatat transaksi berdasarkan wilayah, kategori produk, dan jumlah.

Jalankan kode untuk membuat dan mengisi tabel tersebut agar Anda dapat mengikuti setiap contoh.

CREATE TABLE sales (
  region   TEXT,
  category TEXT,
  amount   NUMERIC
);

INSERT INTO sales VALUES
  ('East',  'Electronics', 500),
  ('East',  'Clothing',    200),
  ('West',  'Electronics', 300),
  ('West',  'Clothing',    400),
  ('North', 'Electronics', 150),
  ('North', 'Clothing',    250);

Cara Lama: UNION ALL

Sebelum SET PENGELOMPOKAN tersedia, mendapatkan total pada beberapa tingkat berarti menulis kueri terpisah dan menggabungkannya dengan UNION ALL. Cara ini berulang, lebih sulit dibaca, dan memindai tabel beberapa kali.

Contoh di bawah mengembalikan total berdasarkan wilayah DAN total berdasarkan kategori—dengan menggunakan tiga pernyataan SELECT terpisah.

SELECT region, NULL AS category, SUM(amount) AS total
FROM sales
GROUP BY region

UNION ALL

SELECT NULL, category, SUM(amount)
FROM sales
GROUP BY category

UNION ALL

SELECT NULL, NULL, SUM(amount)
FROM sales;

Sintaks SET PENGELOMPOKAN

Klausa SET PENGELOMPOKAN ditempatkan di dalam (atau sebagai pengganti) GROUP BY biasa. Anda mencantumkan setiap pengelompokan yang diinginkan sebagai daftar kolom dalam tanda kurung. Set kosong () berarti total keseluruhan—tanpa pengelompokan sama sekali.

Satu kueri ini melakukan persis seperti yang dilakukan UNION ALL tiga bagian di atas, tetapi lebih ringkas dan hanya memindai tabel satu kali.

SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
  (region),
  (category),
  ()
);

Membaca Hasil

Setiap baris dalam keluaran termasuk tepat dalam satu set pengelompokan. Ketika sebuah kolom tidak menjadi bagian dari set pengelompokan yang aktif, nilainya adalah NULL.

  • Baris dengan region = 'East' dan category = NULL termasuk dalam set (region).
  • Baris dengan region = NULL dan category = 'Electronics' termasuk dalam set (category).
  • Baris yang kedua nilainya NULL adalah total keseluruhan dari set ().

Nilai NULL tersebut bersifat struktural—artinya 'semua nilai' untuk dimensi itu, bukan data yang hilang.

Set Pengelompokan Multi-Kolom

Setiap set pengelompokan dapat berisi lebih dari satu kolom. Set (region, category) mengelompokkan kedua kolom secara bersamaan, sama seperti GROUP BY region, category biasa.

Menggabungkannya dengan set individual dan total keseluruhan menghasilkan ringkasan empat tingkat dalam satu kueri.

SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
  (region, category),
  (region),
  (category),
  ()
);

Fungsi PENGELOMPOKAN()

Karena NULL dapat berarti 'kolom ini tidak dikelompokkan' atau data yang memang hilang, SQL menyediakan fungsi PENGELOMPOKAN() untuk membedakan keduanya.

GROUPING(col) mengembalikan 1 ketika kolom tidak disertakan dalam set pengelompokan saat ini (yaitu, NULL-nya bersifat struktural), dan 0 ketika kolom tersebut merupakan bagian dari pengelompokan (atau memiliki nilai NULL yang sebenarnya).

SELECT
  region,
  category,
  SUM(amount)      AS total,
  GROUPING(region) AS is_region_total,
  GROUPING(category) AS is_category_total
FROM sales
GROUP BY GROUPING SETS (
  (region),
  (category),
  ()
);

Mengganti Label NULL

Pola yang umum adalah mengganti NULL struktural dengan label deskriptif agar laporan lebih mudah dibaca. Gunakan CASE WHEN PENGELOMPOKAN(...) = 1 THEN 'Semua ...' ELSE kolom END untuk mengganti label hanya pada baris rollup.

SELECT
  CASE WHEN GROUPING(region)   = 1 THEN 'All Regions'    ELSE region   END AS region,
  CASE WHEN GROUPING(category) = 1 THEN 'All Categories' ELSE category END AS category,
  SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
  (region),
  (category),
  ()
);

SET PENGELOMPOKAN vs ROLLUP

ROLLUP(a, b) adalah bentuk singkat yang diperluas menjadi set pengelompokan (a, b), (a), ()—selalu menambahkan subtotal berdasarkan hierarki dan total keseluruhan.

SET PENGELOMPOKAN memberi Anda kendali penuh: Anda memilih kombinasi yang muncul secara tepat. Jika Anda tidak memerlukan hierarki lengkap, Anda dapat menghilangkan beberapa tingkat. Kedua kueri di bawah menghasilkan keluaran yang sama.

-- Using ROLLUP
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),
  ()
);

SET PENGELOMPOKAN vs CUBE

CUBE(a, b) menghasilkan setiap kombinasi yang mungkin dari kolom yang dicantumkan: (a, b), (a), (b), (). Fitur ini berguna untuk analisis lintas dimensi, tetapi menghasilkan banyak baris.

SET PENGELOMPOKAN memungkinkan Anda memilih hanya kombinasi yang diperlukan, sehingga hasil tetap terfokus dan kueri berjalan cepat.

-- CUBE produces 4 grouping sets for 2 columns
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY CUBE(region, category);

-- GROUPING SETS: omit the (category)-only set if not needed
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
  (region, category),
  (region),
  ()
);

Kasus Penggunaan Praktis: Dasbor Penjualan

Dasbor nyata sering memerlukan rincian tingkat baris, subtotal departemen, dan total keseluruhan dalam satu kumpulan hasil. SET PENGELOMPOKAN membuatnya mudah tanpa agregasi di sisi aplikasi atau beberapa perjalanan bolak-balik.

Kueri ini mengembalikan baris rincian per wilayah dan kategori, subtotal khusus wilayah, serta satu baris total keseluruhan—semuanya diurutkan agar total keseluruhan muncul terakhir.

SELECT
  COALESCE(region,   'TOTAL')      AS region,
  COALESCE(category, 'ALL')        AS category,
  SUM(amount)                      AS total
FROM sales
GROUP BY GROUPING SETS (
  (region, category),
  (region),
  ()
)
ORDER BY
  GROUPING(region),
  region NULLS LAST,
  GROUPING(category),
  category NULLS LAST;

Uji Singkat

Uji pemahaman Anda tentang SET PENGELOMPOKAN.

Ringkasan Pelajaran

Berikut hal-hal yang Anda pelajari tentang SET PENGELOMPOKAN:

  • SET PENGELOMPOKAN memungkinkan Anda menentukan beberapa kombinasi pengelompokan dalam satu kueri, menggantikan pola UNION ALL yang berulang.
  • Setiap set dicantumkan sebagai daftar kolom dalam tanda kurung di dalam GROUP BY GROUPING SETS (...). Set kosong () menghasilkan total keseluruhan.
  • Kolom yang tidak ada dalam set aktif muncul sebagai NULL pada baris tersebut—gunakan GROUPING(col) untuk mendeteksi NULL struktural ini.
  • ROLLUP dan CUBE adalah bentuk singkat yang praktis untuk pola umum, tetapi SET PENGELOMPOKAN memberi Anda kendali penuh dan tepat atas pengelompokan yang disertakan.
  • Gabungkan dengan COALESCE atau CASE WHEN PENGELOMPOKAN(...) untuk mengganti NULL dengan label yang mudah dibaca dalam laporan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penjelasan GROUPING SETS” gratis?

Ya — teks lengkap “Penjelasan GROUPING SETS” 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 “Penjelasan GROUPING SETS”?

Pilih tepat pengelompokan yang Anda inginkan. 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 4 dari 4.

Berapa lama pelajaran “Penjelasan GROUPING SETS” 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