0Pricing
SQL Academy · Ders

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çin GROUPING() kullanın.
  • COALESCE, toplulaştırma kaynaklı NULL değ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 CUBE kullanın; hiyerarşi biliniyorsa veya sütun sayısı fazlaysa ROLLUP ya da açıkça belirtilen GROUPING SETS tercih 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

  1. Tek Bir GROUP BY'ın Ötesi
  2. Ara Toplamlar için ROLLUP
  3. Tüm Birleşimler için CUBE
  4. GROUPING SETS Açıklaması
← SQL Academy Sayfasına Dön