SQL Academy · Pelajaran

CUBE untuk Semua Gabungan

Setiap gabungan pengumpulan serentak.

Pelajaran 3 daripada 413 langkah

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.
  • NULL dalam lajur hasil bermaksud dimensi tersebut telah diagregatkan; gunakan GROUPING() untuk mengesannya.
  • COALESCE menukar NULL agregasi kepada label yang bermakna.
  • CUBE separa (contohnya, GROUP BY year, CUBE(region, category)) menetapkan sesetengah lajur dan hanya melakukan operasi CUBE pada lajur yang selebihnya.
  • Gunakan CUBE untuk analisis ad hoc sepenuhnya; pilih ROLLUP atau GROUPING SETS yang dinyatakan secara jelas apabila hierarki diketahui atau bilangan lajur besar.
Percuma untuk bermula

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

  1. Melangkaui Satu GROUP BY
  2. ROLLUP untuk Subjumlah
  3. CUBE untuk Semua Gabungan
  4. GROUPING SETS Diterangkan
← Kembali ke SQL Academy