0Pricing
SQL Interview Prep · Ders

Koşullu Toplama ile Döndürme

Satırları sütunlara dönüştürmek için taşınabilir CASE-içinde-SUM örüntüsü.

Koşullu Toplama ile Döndürme, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. 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 Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

Mülakat Senaryosu

Raporlama mülakatlarında en sık verilen görevlerden biri şudur: satırları sütunlara dönüştürmek. sales(region, quarter, amount) gibi uzun bir tablonuz vardır ve görüşmeci, her çeyrek için bir sütun içeren geniş bir rapor ister.

Duymak istedikleri taşınabilir ve lehçeden bağımsız yanıt koşullu toplulaştırmadır: CASE ifadesini SUM gibi bir toplulaştırma işlevinin içine yerleştirmek. Bunda ustalaşırsanız, PIVOT anahtar sözcüğü bulunmayanlar da dahil olmak üzere her veritabanında özet tabloya dönüştürme yapabilirsiniz.

Uzun ve Geniş Biçim

Özet tabloya dönüştürmeden önce biçimleri adlandıralım. Uzun biçim her olguyu bir satırda saklar: her bölge/çeyrek çifti kendi satırıdır. Geniş biçim ise bir kategoriyi sütunlara yayar.

  • Uzun: eklemek kolay, yan yana okumak zor.
  • Geniş: insanların okuyacağı raporlar için harika.

Özet tabloya dönüştürme işlemi uzunu genişe çevirir. Görüşmeciler bunu sever; çünkü yalnızca sözdizimini değil, toplulaştırmayı anlayıp anlamadığınızı sınar.

-- Long form (the input)
region | quarter | amount
-------+---------+-------
East   | Q1      | 100
East   | Q2      | 150
West   | Q1      | 200
West   | Q2      | 250

Temel Şablon

Püf noktası şudur: Her çıktı sütunu için, satır o sütunla eşleştiğinde değeri, aksi durumda NULL döndüren bir CASE yazın. Toplulaştırma işleviyle sararak grubu anahtar başına tek satıra indirgeyin.

Bunu şöyle okuyun: tutarı toplayın, ancak yalnızca Q1 satırları için. SUM, NULL değerlerini yok saydığı için eşleşmeyen satırlar hiçbir katkı sağlamaz.

SELECT
  region,
  SUM(CASE WHEN quarter = 'Q1' THEN amount END) AS q1,
  SUM(CASE WHEN quarter = 'Q2' THEN amount END) AS q2
FROM sales
GROUP BY region;

SUM Neden NULL Değerlerini Yok Sayar

Bu kalıp, görüşmecilerin üzerinde duracağı bir gerçek sayesinde çalışır: toplulaştırma işlevleri NULL değerlerini atlar. ELSE içermeyen bir CASE, hiçbir dal eşleşmediğinde NULL döndürür; bu nedenle SUM(CASE WHEN ... THEN amount END) yalnızca seçtiğiniz satırları toplar.

Bunun yerine ELSE 0 yazarsanız, SUM için yine çalışır (sıfır eklemek sonucu değiştirmez), ancak AVG, MIN ve COUNT için davranışı bozabilir.

-- Both produce the same SUM result:
SUM(CASE WHEN quarter = 'Q1' THEN amount END)
SUM(CASE WHEN quarter = 'Q1' THEN amount ELSE 0 END)

Uygulamalı Örnek: Çeyreklik Rapor

Örnek veriler üzerinde çalıştırılan tam sorgu aşağıdadır. Her bölge bir satıra, her çeyrek bir sütuna dönüşür.

GROUP BY region, dört girdi satırını iki çıktı satırında birleştiren kısımdır. Bu olmadan, çoğunlukla NULL değerler içeren, her girdi satırı için bir satır elde ederdiniz.

SELECT
  region,
  SUM(CASE WHEN quarter = 'Q1' THEN amount END) AS q1,
  SUM(CASE WHEN quarter = 'Q2' THEN amount END) AS q2
FROM sales
GROUP BY region;

-- Result:
-- region | q1  | q2
-- East   | 100 | 150
-- West   | 200 | 250

Doğru Toplama İşlevini Seçme

CASE ifadesini içine aldığınız toplama işlevi, soruyla uyumlu olmalıdır:

  • Her hücredeki değerlerin toplamını almak için SUM.
  • Her bölge/çeyrek çifti tam olarak bir değer içeriyorsa ve yalnızca bu değeri göstermek istiyorsanız MAX veya MIN.
  • Her hücre eşleşen satırları sayıyorsa COUNT.

Görüşmeciler genellikle COUNT varyantını sorar: Her durum için, her ay kaç sipariş var?

SELECT
  month,
  COUNT(CASE WHEN status = 'shipped' THEN 1 END) AS shipped,
  COUNT(CASE WHEN status = 'cancelled' THEN 1 END) AS cancelled
FROM orders
GROUP BY month;

Tek Değerli Hücreler için MAX

Her anahtar/kategori çifti tek bir değer taşıyorsa (toplam değil, gerçek bir çapraz tablo söz konusuysa) MAX veya MIN kullanın. Her ikisi de NULL olmayan tek değeri döndürür ve eşleşmeyen dallardan gelen NULL değerlerini yok sayar.

Bu, para toplamak yerine öznitelikleri yeniden şekillendirirken güvenli bir seçimdir; örneğin anahtar/değer ayarları tablosunu varlık başına bir satıra dönüştürmek için kullanılabilir.

-- Turn key/value rows into one wide row per user
SELECT
  user_id,
  MAX(CASE WHEN attr = 'city'  THEN value END) AS city,
  MAX(CASE WHEN attr = 'plan'  THEN value END) AS plan
FROM user_attributes
GROUP BY user_id;

NULL Çıktı Hücrelerini Ele Alma

Bir bölgede Q2 satışı yoksa q2 hücresi NULL olur. Görüşmeci bunun yerine 0 göstermenizi isteyebilir. Toplama işlevinin tamamını COALESCE içine alın.

COALESCE ifadesini CASE içine değil, toplama işlevinin dışına yerleştirin; böylece yalnızca grubun tamamında eşleşen satır bulunmadığında değer değiştirilir.

SELECT
  region,
  COALESCE(SUM(CASE WHEN quarter = 'Q1' THEN amount END), 0) AS q1,
  COALESCE(SUM(CASE WHEN quarter = 'Q2' THEN amount END), 0) AS q2
FROM sales
GROUP BY region;

Genel Toplam Sütunu Ekleme

Yaygın bir devam sorusu, çapraz tabloya dönüştürülmüş tüm sütunların toplamını eklemektir. Sütunları adlarıyla tek tek toplamanız gerekmez. Aynı grup üzerinde kullanılan basit bir SUM(amount), CASE filtrelemesini tamamen yok saydığı için satır toplamını verir.

Bu, görüşmeciye SELECT içindeki her toplama işlevinin aynı grup üzerinde bağımsız olarak hesaplandığını anladığınızı gösterir.

SELECT
  region,
  SUM(CASE WHEN quarter = 'Q1' THEN amount END) AS q1,
  SUM(CASE WHEN quarter = 'Q2' THEN amount END) AS q2,
  SUM(amount) AS total
FROM sales
GROUP BY region;

FILTER ile Toplama İşlevi Kısayolu

PostgreSQL ve SQL standardı, koşullu toplama yazmanın daha temiz bir yolu olan FILTER (WHERE ...) yapısını destekler. Bu yapı daha okunaklıdır ve CASE için gereken kalıp kodunu ortadan kaldırır.

Kapsamlı bilginizi göstermek için bundan bir mülakatta söz edin; ancak MySQL ve SQL Server'ın bunu desteklemediğini, dolayısıyla taşınabilir yanıtın hâlâ CASE olduğunu bilin.

-- Postgres / standard SQL
SELECT
  region,
  SUM(amount) FILTER (WHERE quarter = 'Q1') AS q1,
  SUM(amount) FILTER (WHERE quarter = 'Q2') AS q2
FROM sales
GROUP BY region;

En Büyük Sınırlama

Koşullu toplamanın, görüşmecilerin özellikle üzerinde duracağı bir noktası vardır: her çıktı sütununu elle listelemelisiniz. Çeyrekler veya kategoriler önceden bilinmiyorsa bu sabit sorgu kendini uyarlayamaz.

Bu soruna dinamik çapraz tablo adı verilir ve oluşturulan SQL'i gerektirir. Bununla birlikte, sabit ve bilinen bir kategori kümesi için koşullu toplama, temiz ve taşınabilir bir çözümdür.

Kısa Kontrol

Koşullu toplama kalıbını ne ölçüde kavradığınızı sınayın.

Özet

Koşullu toplama, her görüşmecinin kabul edeceği taşınabilir çapraz tablo yaklaşımıdır:

  • Her çıktı sütunu için, bir toplama işleviyle sarılmış bir CASE.
  • Toplamlar için SUM, tek değerli hücreler için MAX/MIN, sayımlar için COUNT.
  • Toplama işlevleri eşleşmeyen dallardan gelen NULL değerlerini yok saydığı için çalışır.
  • Boş hücreleri 0'a dönüştürmek için COALESCE kullanın.
  • Sınırlama: sütunlar sabit kodlanmalıdır; sıradaki konu dinamik çapraz tablolardır.

Sıkça Sorulan Sorular

“Koşullu Toplama ile Döndürme” dersi ücretsiz mi?

Evet — “Koşullu Toplama ile Döndürme” 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 Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“Koşullu Toplama ile Döndürme” dersinde ne öğreneceğim?

Satırları sütunlara dönüştürmek için taşınabilir CASE-içinde-SUM örüntüsü. SQL Interview Prep 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 Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, 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 1. dersidir.

“Koşullu Toplama ile Döndürme” 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 Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep 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. Koşullu Toplama ile Döndürme
  2. Üreticiye Özgü PIVOT ve Çapraz Tablo Sözdizimi
  3. Sütunları Satırlara Dönüştürme
  4. Bilinmeyen Sütunlarla Dinamik Döndürme
← SQL Interview Prep Sayfasına Dön