0Pricing
SQL Academy · Ders

GROUPING SETS Açıklaması

Tam olarak istediğiniz gruplamaları seçin.

GROUPING SETS Açıklaması, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 4. 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.

GROUPING SETS Nedir?

GROUP BY yan tümcesi yazdığınızda, gruplama yapılacak tek bir sütun kümesi tanımlarsınız. Ancak bazen aynı sorguda birden çok farklı gruplamaya ihtiyaç duyarsınız; sorguyu birkaç kez çalıştırıp UNION ALL kullanmadan.

GROUPING SETS, istediğiniz gruplamaları tam olarak belirtmenizi ve bunların tümünü veriler üzerinde tek geçişte gerçekleştirmenizi sağlar. Listedeki her küme, sonuçta kendi toplulaştırılmış satırlarını üretir.

Örnek Tablo: satış

Bu ders boyunca satış tablosunu kullanacağız. Bu tablo, bölgeye, ürün kategorisine ve tutara göre işlemleri kaydeder.

Her örneği takip edebilmek için tabloyu oluşturup dolduran kodu çalıştırın.

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

INSERT INTO sales VALUES
  ('East',  'Electronics', 500),
  ('East',  'Clothing',    200),
  ('West',  'Electronics', 300),
  ('West',  'Clothing',    400),
  ('North', 'Electronics', 150),
  ('North', 'Clothing',    250);

Eski Yöntem: UNION ALL

GROUPING SETS kullanılmadan önce, birden çok düzeyde toplam almak, ayrı sorgular yazıp bunları UNION ALL ile art arda eklemek anlamına geliyordu. Bu yöntem tekrarlı, okunması daha zor ve tabloyu birden çok kez tarıyor.

Aşağıdaki örnek, üç ayrı SELECT deyimi kullanarak bölge toplamlarını AND kategori toplamlarını döndürür.

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

UNION ALL

SELECT NULL, category, SUM(amount)
FROM sales
GROUP BY category

UNION ALL

SELECT NULL, NULL, SUM(amount)
FROM sales;

GROUPING SETS Söz Dizimi

GROUPING SETS yan tümcesi, normal GROUP BY yan tümcesinin içinde veya onun yerine yer alır. İstediğiniz her gruplamayı parantez içine alınmış bir sütun listesi olarak belirtirsiniz. Boş bir küme (), genel toplamı, yani hiç gruplama yapılmadığını ifade eder.

Bu tek sorgu, yukarıdaki üç parçalı UNION ALL sorgusuyla tamamen aynı işi daha kısa biçimde ve tabloyu yalnızca bir kez tarayarak yapar.

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

Sonucu Okuma

Çıktıdaki her satır tam olarak bir gruplama kümesine aittir. Bir sütun etkin gruplama kümesinin parçası değilse değeri NULL olur.

  • region = 'East' ve category = NULL değerlerine sahip bir satır, (region) kümesine aittir.
  • region = NULL ve category = 'Electronics' değerlerine sahip bir satır, (category) kümesine aittir.
  • Her iki değerin de NULL olduğu satır, () kümesinden gelen genel toplamdır.

Bu NULL değerleri yapısaldır; eksik veriyi değil, o boyut için 'tüm değerleri' ifade eder.

Çok Sütunlu Gruplama Kümeleri

Her gruplama kümesi birden fazla sütun içerebilir. (region, category) kümesi, tıpkı düz GROUP BY region, category gibi her iki sütuna birlikte göre gruplar.

Bu kümenin tek tek kümeler ve genel toplamla birleştirilmesi, tek bir sorguda dört düzeyli özet sunar.

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

GROUPING() İşlevi

NULL, 'bu sütun gruplanmadı' veya gerçekten eksik veri anlamına gelebileceğinden SQL, bunları ayırt etmek için GROUPING() işlevini sağlar.

GROUPING(col), sütun geçerli gruplama kümesine alınmadığında (yani NULL değeri yapısal olduğunda) 1, sütun gruplamanın parçası olduğunda (veya gerçek bir NULL değerine sahip olduğunda) 0 döndürür.

SELECT
  region,
  category,
  SUM(amount)      AS total,
  GROUPING(region) AS is_region_total,
  GROUPING(category) AS is_category_total
FROM sales
GROUP BY GROUPING SETS (
  (region),
  (category),
  ()
);

NULL Etiketlerini Değiştirme

Yaygın bir kalıp, raporların okunmasını kolaylaştırmak için yapısal NULL değerlerini açıklayıcı bir etiketle değiştirmektir. Etiketi yalnızca toplama satırlarında değiştirmek için CASE WHEN GROUPING(...) = 1 THEN 'Tüm ...' ELSE sütun END kullanın.

SELECT
  CASE WHEN GROUPING(region)   = 1 THEN 'All Regions'    ELSE region   END AS region,
  CASE WHEN GROUPING(category) = 1 THEN 'All Categories' ELSE category END AS category,
  SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
  (region),
  (category),
  ()
);

GROUPING SETS ve ROLLUP Karşılaştırması

ROLLUP(a, b), (a, b), (a), () gruplama kümelerine açılan bir kısayoldur; her zaman bir hiyerarşi boyunca ara toplamları ve genel toplamı ekler.

GROUPING SETS size tam denetim sağlar: hangi birleşimlerin görüneceğini tam olarak siz seçersiniz. Hiyerarşinin tamamına ihtiyacınız yoksa bazı düzeyleri çıkarabilirsiniz. Aşağıdaki iki sorgu aynı çıktıyı üretir.

-- Using ROLLUP
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),
  ()
);

GROUPING SETS ve CUBE Karşılaştırması

CUBE(a, b), listelenen sütunların olası tüm birleşimlerini oluşturur: (a, b), (a), (b), (). Boyutlar arası analiz için kullanışlıdır, ancak çok sayıda satır üretir.

GROUPING SETS, yalnızca önemsediğiniz birleşimleri seçmenizi sağlayarak sonucu odaklı ve sorguyu hızlı tutar.

-- CUBE produces 4 grouping sets for 2 columns
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY CUBE(region, category);

-- GROUPING SETS: omit the (category)-only set if not needed
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
  (region, category),
  (region),
  ()
);

Pratik Kullanım: Satış Panosu

Gerçek bir pano genellikle satır düzeyinde ayrıntıya, departman ara toplamlarına ve tek bir sonuç kümesinde genel toplama ihtiyaç duyar. GROUPING SETS, uygulama tarafında toplulaştırma yapmadan veya birden çok gidiş-dönüş gerçekleştirmeden bunu kolayca sağlar.

Bu sorgu, bölge ve kategori başına ayrıntı satırlarını, yalnızca bölgeye göre ara toplamları ve tek bir genel toplam satırını döndürür; tümü, genel toplam en sonda görünecek şekilde sıralanır.

SELECT
  COALESCE(region,   'TOTAL')      AS region,
  COALESCE(category, 'ALL')        AS category,
  SUM(amount)                      AS total
FROM sales
GROUP BY GROUPING SETS (
  (region, category),
  (region),
  ()
)
ORDER BY
  GROUPING(region),
  region NULLS LAST,
  GROUPING(category),
  category NULLS LAST;

Kısa Kontrol

GROUPING SETS anlayışınızı sınayın.

Ders Özeti

GROUPING SETS hakkında öğrendikleriniz:

  • GROUPING SETS, tekrarlı UNION ALL kalıplarının yerini alarak tek bir sorguda birden çok gruplama birleşimi tanımlamanızı sağlar.
  • Her küme, GROUP BY GROUPING SETS (...) içinde parantez içine alınmış bir sütun listesi olarak belirtilir. Boş bir küme (), genel toplamı üretir.
  • Etkin kümede bulunmayan sütunlar o satırda NULL olarak görünür; bu yapısal NULL değerlerini saptamak için GROUPING(col) kullanın.
  • ROLLUP ve CUBE, yaygın kalıplar için kullanışlı kısayollardır; ancak GROUPING SETS, hangi gruplamaların dahil edileceği üzerinde tam ve kesin denetim sağlar.
  • Raporlardaki NULL değerlerini okunabilir etiketlerle değiştirmek için COALESCE veya CASE WHEN GROUPING(...) ile birleştirin.

Sıkça Sorulan Sorular

“GROUPING SETS Açıklaması” dersi ücretsiz mi?

Evet — “GROUPING SETS Açıklaması” 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.

“GROUPING SETS Açıklaması” dersinde ne öğreneceğim?

Tam olarak istediğiniz gruplamaları seçin. 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 4. dersidir.

“GROUPING SETS Açıklaması” 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