0Pricing
SQL Academy · Ders

Ara Toplamlar için ROLLUP

Ara toplamları ve genel toplamları hesaplayın.

Ara Toplamlar için ROLLUP, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. 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.

ROLLUP Nedir?

Verileri GROUP BY ile grupladığınızda, her grup için bir satır elde edersiniz. Ancak çoğu zaman her grup için ara toplamları ve tüm satırlar için bir genel toplamı da görmek istersiniz. ROLLUP tam olarak bunu yapar.

ROLLUP, GROUP BY'ın bir uzantısıdır. Sonuç kümenize otomatik olarak ek özet satırları ekler; gruplama hiyerarşisinin her düzeyinde ara toplamlar ve sonunda bir genel toplam sunar.

Örnek Verileri Hazırlama

Üzerinde çalışmak için basit bir sales tablosu oluşturalım. Bu tablo, her işlem için bölgeyi, ürün kategorisini ve satış tutarını saklar. Tabloyu oluşturup doldurmak için aşağıdaki ifadeleri çalıştırın.

CREATE TABLE sales (
  region   TEXT,
  category TEXT,
  amount   NUMERIC
);

INSERT INTO sales VALUES
  ('East',  'Electronics', 500),
  ('East',  'Electronics', 300),
  ('East',  'Clothing',    150),
  ('West',  'Electronics', 700),
  ('West',  'Clothing',    200),
  ('West',  'Clothing',    100);

Önce Normal GROUP BY

ROLLUP kullanmadan önce normal bir GROUP BY ifadesinin bize ne verdiğine bakalım. Aşağıdaki sorgu, her (bölge, kategori) çifti için bir toplam döndürür; ara toplam veya genel toplam döndürmez.

SELECT region, category, SUM(amount) AS total
FROM   sales
GROUP  BY region, category
ORDER  BY region, category;

GROUP BY ROLLUP ile Tanışma

GROUP BY ifadesini GROUP BY ROLLUP(...) ile değiştirin; SQL ara toplam satırlarını otomatik olarak eklesin. ROLLUP() içindeki sütunlar bir hiyerarşi oluşturur ve bu hiyerarşinin her düzeyi için bir ara toplamın yanı sıra son bir genel toplam üretilir.

SELECT region, category, SUM(amount) AS total
FROM   sales
GROUP  BY ROLLUP(region, category)
ORDER  BY region, category;

ROLLUP Çıktısını Okuma

ROLLUP sonucu üç tür satır içerir:

  • Ayrıntı satırları — normal GROUP BY işleminde olduğu gibi her (bölge, kategori) kombinasyonu için bir satır.
  • Ara toplam satırları — category = NULL olacak şekilde her bölge için bir satır; bölge toplamını gösterir.
  • Genel toplam satırı — hem bölgenin hem de kategorinin NULL olduğu bir satır; genel toplamı gösterir.

NULL değerleri, özetlenen düzeyi belirten yer tutucular olarak işlev görür.

NULL Değerlerini Etiketlemek için COALESCE Kullanma

NULL işaretleri son kullanıcıların kafasını karıştırabilir. Her sütunu COALESCE içine alarak bunları 'Tüm Kategoriler' ve 'Genel Toplam' gibi anlamlı etiketlerle değiştirin.

SELECT
  COALESCE(region,   'Grand Total')    AS region,
  COALESCE(category, 'All Categories') AS category,
  SUM(amount)                          AS total
FROM   sales
GROUP  BY ROLLUP(region, category)
ORDER  BY region, category;

Tek Sütunlu ROLLUP

ROLLUP yalnızca bir sütunla da çalışır. ROLLUP(region) yazdığınızda her bölge için bir satırın yanı sıra sonda tek bir genel toplam satırı elde edersiniz. Bu, en basit biçimidir ve ayrıntı satırlarının altında kümülatif toplam gereken tüm raporlar için kullanışlıdır.

SELECT
  COALESCE(region, 'Grand Total') AS region,
  SUM(amount)                     AS total
FROM   sales
GROUP  BY ROLLUP(region)
ORDER  BY region;

Üç Düzeyli ROLLUP

Daha derin hiyerarşiler oluşturmak için ROLLUP'a üç veya daha fazla sütun aktarabilirsiniz. ROLLUP(year, region, category) ile yıl+bölge başına ara toplamlar, yıl başına ara toplamlar ve bir genel toplam elde edersiniz; eklenen her sütun özetlemeye bir düzey daha ekler.

-- Extend the demo with a year column
SELECT
  COALESCE(CAST(yr AS TEXT), 'All Years')     AS year,
  COALESCE(region,   'All Regions')            AS region,
  COALESCE(category, 'All Categories')         AS category,
  SUM(amount)                                  AS total
FROM (
  SELECT 2024 AS yr, region, category, amount FROM sales
  UNION ALL
  SELECT 2025 AS yr, region, category, amount FROM sales
) t
GROUP  BY ROLLUP(yr, region, category)
ORDER  BY yr, region, category;

GROUPING() ile Özet Satırlarını Belirleme

GROUPING() işlevi, o satırdaki sütun değerinin ROLLUP tarafından oluşturulmuş bir NULL (özet yer tutucusu) olması durumunda 1, gerçek bir veri değeri olması durumunda ise 0 döndürür. Böylece gerçek NULL verilerini rollup özeti olan NULL değerlerinden ayırt edebilirsiniz.

SELECT
  region,
  category,
  SUM(amount)        AS total,
  GROUPING(region)   AS is_region_summary,
  GROUPING(category) AS is_cat_summary
FROM   sales
GROUP  BY ROLLUP(region, category)
ORDER  BY region, category;

Özet Satırlarını Filtreleme

ROLLUP satırları toplulaştırmadan sonra eklediği için bunları WHERE ile filtreleyemezsiniz. HAVING kullanın veya sorgunun tamamını bir alt sorgunun içine alın. Aşağıdaki örnek yalnızca bölge ara toplamlarını, yani kategorinin ROLLUP kaynaklı NULL, bölgenin ise gerçek bir değer olduğu satırları tutar.

SELECT region, SUM(amount) AS regional_total
FROM   sales
GROUP  BY ROLLUP(region, category)
HAVING GROUPING(category) = 1
   AND GROUPING(region)   = 0
ORDER  BY region;

ROLLUP ve GROUPING SETS

ROLLUP(a, b), belirli bir GROUPING SETS kümesinin kısaltmasıdır. Aşağıdaki iki sorgu tamamen eşdeğerdir; ROLLUP yalnızca her gruplama düzeyini elle yazma zahmetinden kurtarır.

-- Using ROLLUP (concise)
SELECT region, category, SUM(amount) AS total
FROM   sales
GROUP  BY ROLLUP(region, category);

-- Equivalent explicit GROUPING SETS
SELECT region, category, SUM(amount) AS total
FROM   sales
GROUP  BY GROUPING SETS(
  (region, category),
  (region),
  ()
);

Hızlı Kontrol

Bu soruyla ROLLUP konusundaki anlayışınızı sınayın.

Ders Özeti

Harika iş çıkardınız! ROLLUP hakkında öğrendiklerinizi özetleyelim:

  • GROUP BY ROLLUP(a, b), sütun hiyerarşisinin her düzeyi için ara toplamları ve tüm satırlar için bir genel toplamı otomatik olarak oluşturur.
  • Özet satırları, üst düzeye taşınan sütunlarda NULL ile gösterilir. Okunabilir etiketler vermek için COALESCE kullanın.
  • GROUPING() işlevi ROLLUP tarafından oluşturulan NULL değerleri için 1, gerçek veri değerleri için 0 döndürür; böylece bu ikisini ayırt edebilirsiniz.
  • Yalnızca özet satırlarını filtrelemek için HAVING GROUPING(...) = 1 kullanın.
  • ROLLUP(a, b), GROUPING SETS((a, b), (a), ()) ifadesinin kısaltmasıdır.

ROLLUP, karmaşık UNION sorguları yazmadan raporunuzda ara toplamlar ve bir genel toplam gerektiğinde başvuracağınız temel araçtır.

Sıkça Sorulan Sorular

“Ara Toplamlar için ROLLUP” dersi ücretsiz mi?

Evet — “Ara Toplamlar için ROLLUP” 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.

“Ara Toplamlar için ROLLUP” dersinde ne öğreneceğim?

Ara toplamları ve genel toplamları hesaplayı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 2. dersidir.

“Ara Toplamlar için ROLLUP” 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