Tüm Birleşimler için CUBE
Her gruplama birleşimini tek seferde alın.
Tüm Birleşimler için CUBE, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
CUBE Nedir?
SQL'deki CUBE uzantısı, bir sütun listesinden oluşturulabilecek her gruplama kombinasyonunu üretir. ROLLUP bir hiyerarşi oluştururken CUBE, genel toplam da dahil olmak üzere ara toplamların tüm çapraz çarpımını üretir.
Bunu şu isteğe yanıt vermek gibi düşünebilirsiniz: “Bu sütunlardan hesaplanabilecek tüm ara toplamları verin.”
Tabloyu Hazırlama
Geliri yıla, bölgeye ve ürün kategorisine göre izleyen bir sales tablosu kullanacağız. Bu tür çok boyutlu veriler, CUBE'ün gücünü gösterdiği alanlardır.
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);İlk CUBE Sorgunuz
Sözdizimi basittir: GROUP BY yerine GROUP BY CUBE(...) kullanın ve sütunları parantezlerin içine yazın. SQL, bu sütunların tüm kombinasyonlarını gruplama kümeleri olarak oluşturur.
SELECT
year,
region,
category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;CUBE Kaç Gruplama Üretir?
n sütun için CUBE, sütun listesinin her alt kümesi için bir tane olmak üzere 2n gruplama kümesi üretir; boş küme (genel toplam) de buna dahildir.
3 sütunla (yıl, bölge, kategori) bu sayı 2³ = 8 gruplama kümesidir: her sütun tek başına, her sütun çifti, üç sütunun tamamı ve hiçbiri.
-- 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, Üst Düzeye Taşınan Boyutu Gösterir
ROLLUP gibi CUBE de bir sütunun toplulaştırıldığını belirtmek için NULL kullanır. Bir sonuç satırında region değeri NULL ise bu satır, diğer sütunların söz konusu kombinasyonu için tüm bölgeleri özetler.
Gerçek bir NULL değerini toplulaştırma işaretinden ayırt etmek için GROUPING(col) kullanın.
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;COALESCE ile NULL Değerlerini Okunabilir Hale Getirme
Raporlardaki çıktıyı daha okunabilir hale getirmek için her gruplama sütununu COALESCE içine alın ve toplulaştırma kaynaklı NULL değerini 'ALL' gibi açıklayıcı bir etiketle değiştirin.
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 ve ROLLUP — Temel Fark
ROLLUP(a, b, c) yalnızca tek bir hiyerarşi boyunca ara toplamlar oluşturur: (a,b,c), (a,b), (a), (). Soldan sağa sıralamaya uyar.
CUBE(a, b, c) ise (a,c) gibi çapraz kesitler veya tek başına (b) dahil olmak üzere her alt kümeyi oluşturur; ROLLUP bunları tamamen atlar. Önceden belirlenmiş bir hiyerarşi olmadan tam çok boyutlu analiz gerektiğinde CUBE kullanın.
-- 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);Kısmi CUBE
Normal GROUP BY sütunlarını bir CUBE alt listesiyle birlikte kullanabilirsiniz. CUBE(...) dışında listelenen sütunlar her gruplama kümesinde her zaman bulunur; tüm kombinasyon işlemi yalnızca içindeki sütunlara uygulanır.
-- 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;HAVING ile CUBE Sonuçlarını Filtreleme
HAVING, normal GROUP BY ile olduğu gibi CUBE çıktısı üzerinde de çalışır. Toplulaştırılmış değeri bir eşiği karşılamayan gruplama satırlarını filtreleyebilirsiniz; örneğin yalnızca toplam gelirin bir alt sınırı aştığı satırları tutabilirsiniz.
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;CUBE'ü Pencere İşlevleriyle Birleştirme
Bir CUBE sorgusunu bir CTE içine alıp ardından sonuç içindeki satırları sıralamak veya karşılaştırmak için pencere işlevleri uygulayabilirsiniz. Bu, yönetici düzeyindeki panolar oluşturmak için güçlü bir kalıptır.
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;CUBE Ne Zaman Seçilmeli
CUBE şu durumlarda doğru araçtır:
- Özel amaçlı veya OLAP tarzı bir rapor için tüm ara toplam kombinasyonlarına ihtiyacınız varsa.
- Gruplama sütunlarınız arasında doğal bir hiyerarşi yoksa.
- Analistlerin verileri diledikleri şekilde dilimlemesine izin vermek istiyorsanız.
Sütun sayısı fazla olduğunda CUBE kullanmaktan kaçının; 4 sütun zaten 16 gruplama kümesi, 5 sütun ise 32 gruplama kümesi oluşturur. Sonuç kümelerini yönetilebilir tutmak için ROLLUP veya açıkça belirtilen GROUPING SETS tercih edin.
Kısa Kontrol
GROUP BY CUBE(a, b, c, d) kaç farklı gruplama kümesi üretir?
Ders Özeti
Bu derste CUBE'ün bir sütun listesinden olası tüm gruplama kümeleri birleşimlerini nasıl oluşturduğunu ve bunun onu çok boyutlu raporlama için nasıl ideal kıldığını öğrendiniz.
Önemli noktalar:
GROUP BY CUBE(a, b, c), 2n gruplama kümesi üretir.- Sonuç sütunundaki
NULL, o boyutun toplulaştırıldığını belirtir; bunu saptamak içinGROUPING()kullanın. COALESCE, toplulaştırma kaynaklıNULLdeğerlerini anlamlı etiketlere dönüştürür.- Kısmi bir
CUBE(ör.GROUP BY year, CUBE(region, category)), bazı sütunları sabit tutar ve yalnızca kalan sütunlar için küp oluşturur. - Tam kapsamlı özel amaçlı analiz için
CUBEkullanın; hiyerarşi biliniyorsa veya sütun sayısı fazlaysaROLLUPya da açıkça belirtilenGROUPING SETStercih edin.
Sıkça Sorulan Sorular
“Tüm Birleşimler için CUBE” dersi ücretsiz mi?
Evet — “Tüm Birleşimler için CUBE” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Tüm Birleşimler için CUBE” dersinde ne öğreneceğim?
Her gruplama birleşimini tek seferde alın. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Tüm Birleşimler için CUBE” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Tek Bir GROUP BY'ın Ötesi
- Ara Toplamlar için ROLLUP
- Tüm Birleşimler için CUBE
- GROUPING SETS Açıklaması