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.NULLpada kolom hasil berarti dimensi tersebut diagregasikan; gunakanGROUPING()untuk mendeteksinya.COALESCEmengubahNULLhasil agregasi menjadi label yang bermakna.CUBEparsial (misalnya,GROUP BY year, CUBE(region, category)) menetapkan beberapa kolom dan hanya menerapkan kubus pada kolom lainnya.- Gunakan
CUBEuntuk analisis ad hoc menyeluruh; pilihROLLUPatauGROUPING SETSyang 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
- Melampaui Satu GROUP BY
- ROLLUP untuk Subtotal
- CUBE untuk Semua Kombinasi
- Penjelasan GROUPING SETS