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 = NULLolacak ş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
NULLolduğ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
- Tek Bir GROUP BY'ın Ötesi
- Ara Toplamlar için ROLLUP
- Tüm Birleşimler için CUBE
- GROUPING SETS Açıklaması