0Pricing
SQL Academy · Pelajaran

CUBE untuk Semua Kombinasi

Setiap kombinasi pengelompokan sekaligus.

CUBE untuk Semua Kombinasi adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 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 CUBE?

Ekstensi CUBE dalam SQL menghasilkan setiap kemungkinan kombinasi pengelompokan dari daftar kolom. Jika ROLLUP membuat sebuah hierarki, CUBE menghasilkan hasil kali silang penuh dari subtotal — termasuk total keseluruhan.

Anggaplah ini sebagai jawaban atas pertanyaan: "Tampilkan setiap subtotal yang dapat dihitung dari kolom-kolom ini."

Menyiapkan Tabel

Kita akan menggunakan tabel sales yang melacak pendapatan berdasarkan tahun, wilayah, dan kategori produk. Data multidimensi seperti ini adalah tempat CUBE paling unggul.

CREATE TABLE sales (
  year     INT,
  region   VARCHAR(20),
  category VARCHAR(20),
  revenue  NUMERIC(10,2)
);

INSERT INTO sales VALUES
  (2023, 'North', 'Electronics', 12000),
  (2023, 'North', 'Clothing',     8000),
  (2023, 'South', 'Electronics',  9500),
  (2023, 'South', 'Clothing',     6000),
  (2024, 'North', 'Electronics', 14000),
  (2024, 'North', 'Clothing',     9500),
  (2024, 'South', 'Electronics', 11000),
  (2024, 'South', 'Clothing',     7200);

Kueri CUBE Pertama Anda

Sintaksnya sederhana: ganti GROUP BY dengan GROUP BY CUBE(...), lalu cantumkan kolom di dalamnya. SQL akan menghasilkan semua kombinasi kolom tersebut sebagai set pengelompokan.

SELECT
  year,
  region,
  category,
  SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;

Berapa Banyak Pengelompokan yang Dihasilkan CUBE?

Untuk n kolom, CUBE menghasilkan 2n set pengelompokan — satu untuk setiap subset dari daftar kolom, termasuk set kosong (total keseluruhan).

Dengan 3 kolom (tahun, wilayah, kategori), hasilnya adalah 2³ = 8 set pengelompokan: setiap kolom sendiri, setiap pasangan, ketiganya sekaligus, dan tidak ada kolom.

-- 3 columns => 8 grouping sets:
-- (year, region, category)
-- (year, region)
-- (year, category)
-- (region, category)
-- (year)
-- (region)
-- (category)
-- () <- grand total
SELECT COUNT(*) AS row_count
FROM (
  SELECT year, region, category, SUM(revenue)
  FROM sales
  GROUP BY CUBE(year, region, category)
) sub;

NULL Menandai Dimensi yang Digulung

Sama seperti ROLLUP, CUBE menggunakan NULL untuk menandakan bahwa sebuah kolom telah diagregasikan. Jika region bernilai NULL pada baris hasil, baris tersebut meringkas semua wilayah untuk kombinasi kolom lainnya.

Gunakan GROUPING(col) untuk membedakan nilai NULL yang sebenarnya dari penanda agregasi.

SELECT
  GROUPING(year)     AS g_year,
  GROUPING(region)   AS g_region,
  GROUPING(category) AS g_category,
  year,
  region,
  category,
  SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY g_year, g_region, g_category;

Membuat NULL Lebih Mudah Dibaca dengan COALESCE

Agar keluaran lebih mudah dibaca dalam laporan, bungkus setiap kolom yang dikelompokkan dengan COALESCE, lalu ganti NULL agregasi dengan label deskriptif seperti 'ALL'.

SELECT
  COALESCE(CAST(year AS VARCHAR), 'ALL YEARS')     AS year,
  COALESCE(region,   'ALL REGIONS')                AS region,
  COALESCE(category, 'ALL CATEGORIES')             AS category,
  SUM(revenue)                                     AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;

CUBE dibandingkan ROLLUP — Perbedaan Utama

ROLLUP(a, b, c) hanya membuat subtotal sepanjang satu hierarki: (a,b,c), (a,b), (a), (). Fitur ini mengikuti urutan dari kiri ke kanan.

CUBE(a, b, c) membuat setiap subset — termasuk lintas dimensi seperti (a,c) atau hanya (b) — yang sepenuhnya dilewati oleh ROLLUP. Gunakan CUBE ketika Anda memerlukan analisis multidimensi penuh tanpa hierarki yang telah ditentukan sebelumnya.

-- ROLLUP: 4 grouping sets
SELECT year, region, SUM(revenue)
FROM sales
GROUP BY ROLLUP(year, region);

-- CUBE: 4 grouping sets for 2 columns (same count here)
-- but adds the (region) subtotal that ROLLUP omits
SELECT year, region, SUM(revenue)
FROM sales
GROUP BY CUBE(year, region);

CUBE Parsial

Anda dapat mencampur kolom GROUP BY biasa dengan subdaftar CUBE. Kolom yang dicantumkan di luar CUBE(...) selalu ada dalam setiap set pengelompokan, sedangkan hanya kolom di dalamnya yang mendapatkan perlakuan kombinasi penuh.

-- year is fixed; CUBE only over region and category
SELECT
  year,
  COALESCE(region,   'ALL REGIONS')    AS region,
  COALESCE(category, 'ALL CATEGORIES') AS category,
  SUM(revenue) AS total_revenue
FROM sales
GROUP BY year, CUBE(region, category)
ORDER BY year, region, category;

Penyaringan dengan HAVING pada Hasil CUBE

HAVING bekerja pada keluaran CUBE persis seperti pada GROUP BY biasa. Anda dapat menyaring baris pengelompokan yang nilai agregatnya tidak memenuhi ambang batas—misalnya, hanya mempertahankan baris yang total pendapatannya melebihi nilai minimum.

SELECT
  COALESCE(region,   'ALL REGIONS')    AS region,
  COALESCE(category, 'ALL CATEGORIES') AS category,
  SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(region, category)
HAVING SUM(revenue) > 15000
ORDER BY total_revenue DESC;

Menggabungkan CUBE dengan Fungsi Jendela

Anda dapat membungkus kueri CUBE dalam CTE, lalu menerapkan fungsi jendela untuk memberi peringkat atau membandingkan baris dalam hasilnya. Pola ini sangat berguna untuk membangun dasbor tingkat eksekutif.

WITH cube_result AS (
  SELECT
    COALESCE(region,   'ALL') AS region,
    COALESCE(category, 'ALL') AS category,
    SUM(revenue) AS total_revenue
  FROM sales
  GROUP BY CUBE(region, category)
)
SELECT
  region,
  category,
  total_revenue,
  RANK() OVER (ORDER BY total_revenue DESC) AS revenue_rank
FROM cube_result
ORDER BY revenue_rank;

Kapan Memilih CUBE

CUBE adalah alat yang tepat ketika:

  • Anda memerlukan setiap kombinasi subtotal untuk laporan ad hoc atau bergaya OLAP.
  • Tidak ada hierarki alami di antara kolom pengelompokan Anda.
  • Anda ingin membiarkan analis memilah data dengan cara apa pun yang mereka pilih.

Hindari CUBE ketika jumlah kolom besar—4 kolom saja sudah menghasilkan 16 set pengelompokan, sedangkan 5 kolom menghasilkan 32. Pilih ROLLUP atau GROUPING SETS yang dituliskan secara eksplisit agar kumpulan hasil tetap mudah dikelola.

Uji Singkat

Berapa banyak set pengelompokan berbeda yang dihasilkan oleh GROUP BY CUBE(a, b, c, d)?

Ringkasan Pelajaran

Dalam pelajaran ini, Anda mempelajari cara CUBE menghasilkan setiap kombinasi set pengelompokan yang mungkin dari sebuah daftar kolom, sehingga ideal untuk pelaporan multidimensi.

Hal-hal penting:

  • GROUP BY CUBE(a, b, c) menghasilkan 2n set pengelompokan.
  • NULL pada kolom hasil berarti dimensi tersebut diagregasikan; gunakan GROUPING() untuk mendeteksinya.
  • COALESCE mengubah NULL hasil agregasi menjadi label yang bermakna.
  • CUBE parsial (misalnya, GROUP BY year, CUBE(region, category)) menetapkan beberapa kolom dan hanya menerapkan kubus pada kolom lainnya.
  • Gunakan CUBE untuk analisis ad hoc menyeluruh; pilih ROLLUP atau GROUPING SETS yang dituliskan secara eksplisit ketika hierarkinya sudah diketahui atau jumlah kolomnya besar.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “CUBE untuk Semua Kombinasi” gratis?

Ya — teks lengkap “CUBE untuk Semua Kombinasi” 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 “CUBE untuk Semua Kombinasi”?

Setiap kombinasi pengelompokan sekaligus. 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 3 dari 4.

Berapa lama pelajaran “CUBE untuk Semua Kombinasi” 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