CUBE untuk Semua Gabungan
Setiap gabungan pengumpulan serentak.
CUBE untuk Semua Gabungan ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah CUBE?
Peluasan CUBE dalam SQL menghasilkan setiap gabungan pengumpulan yang mungkin daripada senarai lajur. Jika ROLLUP membina hierarki, CUBE menghasilkan gabungan silang penuh jumlah kecil — termasuk jumlah keseluruhan.
Anggaplah ia sebagai jawapan kepada soalan: "Berikan saya setiap jumlah kecil yang boleh dikira daripada lajur ini."
Menyediakan Jadual
Kita akan menggunakan jadual sales yang menjejak hasil mengikut tahun, wilayah dan kategori produk. Data berbilang dimensi seperti ini ialah tempat CUBE benar-benar menyerlah.
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 mudah: gantikan GROUP BY dengan GROUP BY CUBE(...) dan senaraikan lajur di dalamnya. SQL akan menjana semua gabungan lajur tersebut sebagai set pengumpulan.
SELECT
year,
region,
category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;Berapakah Bilangan Pengumpulan yang Dihasilkan oleh CUBE?
Bagi n lajur, CUBE menghasilkan 2n set pengumpulan — satu bagi setiap subhimpunan senarai lajur, termasuk set kosong (jumlah keseluruhan).
Dengan 3 lajur (tahun, wilayah, kategori), jumlahnya ialah 2³ = 8 set pengumpulan: setiap lajur secara bersendirian, setiap pasangan, ketiga-tiganya bersama-sama dan tiada satu pun.
-- 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 Menandakan Dimensi yang Digulung Naik
Sama seperti ROLLUP, CUBE menggunakan NULL untuk menandakan bahawa sesuatu lajur telah diagregatkan. Jika wilayah ialah NULL dalam baris hasil, baris itu meringkaskan semua wilayah bagi gabungan lajur yang selebihnya.
Gunakan GROUPING(col) untuk membezakan nilai NULL sebenar daripada penanda pengagregatan.
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;Menjadikan NULL Mudah Dibaca dengan COALESCE
Untuk menjadikan hasil lebih mudah dibaca dalam laporan, balut setiap lajur yang dikumpulkan dengan COALESCE, dengan menggantikan NULL pengagregatan 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 berbanding ROLLUP — Perbezaan Utama
ROLLUP(a, b, c) hanya menghasilkan jumlah kecil sepanjang satu hierarki: (a,b,c), (a,b), (a), (). Ia mematuhi susunan dari kiri ke kanan.
CUBE(a, b, c) menghasilkan setiap subhimpunan — termasuk keratan rentas seperti (a,c) atau (b) sahaja — yang langsung tidak dihasilkan oleh ROLLUP. Gunakan CUBE apabila anda memerlukan analisis berbilang dimensi sepenuhnya tanpa hierarki yang ditetapkan terlebih dahulu.
-- 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 Separa
Anda boleh mencampurkan lajur GROUP BY biasa dengan subsenarai CUBE. Lajur yang disenaraikan di luar CUBE(...) sentiasa hadir dalam setiap set pengumpulan, manakala hanya lajur di dalamnya menerima pengendalian gabungan 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;Menapis dengan HAVING pada Hasil CUBE
HAVING berfungsi pada keluaran CUBE sama seperti pada GROUP BY biasa. Anda boleh menapis keluar baris pengelompokan yang nilai agregatnya tidak mencapai ambang — contohnya, mengekalkan hanya baris yang jumlah hasilnya 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 Tetingkap
Anda boleh membungkus kueri CUBE dalam CTE, kemudian menggunakan fungsi tetingkap untuk menyusun kedudukan atau membandingkan baris dalam hasil tersebut. Ini ialah corak yang berkuasa untuk membina papan pemuka peringkat 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;Bila Memilih CUBE
CUBE ialah alat yang sesuai apabila:
- Anda memerlukan setiap kombinasi jumlah kecil untuk laporan ad hoc atau bergaya OLAP.
- Tiada hierarki semula jadi antara lajur pengelompokan Anda.
- Anda mahu membenarkan penganalisis menghiris data mengikut cara yang mereka pilih.
Elakkan CUBE apabila bilangan lajur besar — 4 lajur sudah menghasilkan 16 set pengelompokan, manakala 5 lajur menghasilkan 32. Pilih ROLLUP atau GROUPING SETS yang dinyatakan secara jelas supaya set hasil kekal mudah diurus.
Semakan Pantas
Berapakah bilangan set pengelompokan yang berbeza yang dihasilkan oleh GROUP BY CUBE(a, b, c, d)?
Rumusan Pelajaran
Dalam pelajaran ini, Anda telah mempelajari cara CUBE menjana setiap kombinasi set pengelompokan yang mungkin daripada senarai lajur, menjadikannya sesuai untuk pelaporan berbilang dimensi.
Perkara penting:
GROUP BY CUBE(a, b, c)menghasilkan 2n set pengelompokan.NULLdalam lajur hasil bermaksud dimensi tersebut telah diagregatkan; gunakanGROUPING()untuk mengesannya.COALESCEmenukarNULLagregasi kepada label yang bermakna.CUBEsepara (contohnya,GROUP BY year, CUBE(region, category)) menetapkan sesetengah lajur dan hanya melakukan operasi CUBE pada lajur yang selebihnya.- Gunakan
CUBEuntuk analisis ad hoc sepenuhnya; pilihROLLUPatauGROUPING SETSyang dinyatakan secara jelas apabila hierarki diketahui atau bilangan lajur besar.
Pelajari SQL dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 46
- Pelajaran
- 183
Soalan Lazim
Adakah pelajaran “CUBE untuk Semua Gabungan” percuma?
Ya — teks penuh “CUBE untuk Semua Gabungan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “CUBE untuk Semua Gabungan”?
Setiap gabungan pengumpulan serentak. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “CUBE untuk Semua Gabungan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Melangkaui Satu GROUP BY
- ROLLUP untuk Subjumlah
- CUBE untuk Semua Gabungan
- GROUPING SETS Diterangkan