Ana içeriğe geç
Kesit SQL
Temel · Fonksiyonlar

CASE WHEN: SQL'de eğer-ise

Koşullu sütunlar, segmentleme ve koşullu sayma.

Uygulamada aç, 8 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Koşula göre değer üretmek

CASE, programlamadaki if/else'in SQL karşılığıdır. İlk doğru koşulun değerini döndürür.

SELECT name, price,
       CASE
         WHEN price < 300 THEN 'Ekonomik'
         WHEN price < 1500 THEN 'Orta'
         ELSE 'Premium'
       END AS fiyat_sinifi
FROM products;

Gruplamada CASE

SELECT CASE WHEN price < 300 THEN 'Ekonomik'
            WHEN price < 1500 THEN 'Orta'
            ELSE 'Premium' END AS sinif,
       COUNT(*) AS urun_sayisi
FROM products
GROUP BY sinif;

Koşullu toplama: analistin süper gücü

Tek sorguda birden fazla sayımı yan yana koymak için CASE'i toplama fonksiyonunun içine koyarsın:

SELECT channel,
       COUNT(*) AS toplam,
       SUM(CASE WHEN status = 'delivered' THEN 1 ELSE 0 END) AS teslim,
       SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS iptal
FROM orders
GROUP BY channel;
FILTER sözdizimiPostgreSQL ve SQLite standarttaki COUNT(*) FILTER (WHERE status = 'cancelled') yazımını da destekler.

Derinleş: CASE ile yapılan dört iş

  1. Sınıflandırma: fiyatı bantlara ayırmak.
  2. Koşullu sayım: SUM(CASE WHEN status = 'iptal' THEN 1 ELSE 0 END).
  3. Özel sıralama: ORDER BY CASE status WHEN 'teslim' THEN 1 WHEN 'iade' THEN 2 ELSE 3 END.
  4. Güvenli bölme: CASE WHEN payda = 0 THEN NULL ELSE pay / payda END.
SELECT status, COUNT(*) AS siparis
FROM lk_orders
GROUP BY status
ORDER BY CASE status WHEN 'teslim' THEN 1 WHEN 'iade' THEN 2 ELSE 3 END;

CASE'in her dalı aynı tipte değer döndürmelidir; bir dalda sayı, diğerinde metin döndürmek bazı SQL türlerinde hata verir.

Alıştırmalara geç (8)