Ana içeriğe geç
Modül 4 · Ders 3 ders 4Kurstaki 15/57~10 min
Modül dersleri (3/4)

Koşullu mantık: CASE WHEN

Şu ana kadar gördüğümüz her şey verileri olduğu gibi çıkarıyor. Ancak çoğu zaman istersiniz dönüştürmek için: maaşları kademelere ayırın, yeni işe alınanları şu şekilde işaretleyin: "junior", sayısal bir kodu okunabilir bir etikete çevirin. SQL standardı bunun için kullanılan araca CASE WHEN adı verilir.

Sözdizimi: mini if/else

SQL
CASE
  WHEN condition_1 THEN value_1
  WHEN condition_2 THEN value_2
  ...
  ELSE default_value
END

Herhangi bir dilde tam olarak if/else if/else gibi okunur: SQL değerlendirir koşullar sırayla ve ilk doğru olanda durarak karşılık gelen value. Hiçbiri doğru değilse ELSE değerini döndürür. eğer sen ELSE atlanırsa ve hiçbir dal eşleşmesi olmazsa, NULL değeri döndürülür.

SQL
-- Classify employees by salary tier:
SELECT first_name,
       last_name,
       salary,
       CASE
         WHEN salary >= 50000 THEN 'Senior'
         WHEN salary >= 35000 THEN 'Mid'
         ELSE                       'Junior'
       END AS tier
FROM   employees;

CASE SELECT içinde yaşar: tıpkı herhangi bir sütun gibi bir sütun üretir işlevine AS (burada) ile bir takma ad verilmesi son derece normaldir. tier).

CASE nerede kullanılır?

Üç yinelenen yer:

  1. SELECT içinde türetilmiş sütunlar oluşturmak için (yukarıdaki örnek).
  2. "Özel" sıralama için ORDER BY içinde:
    SQL
    ORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name;
    -- Engineering first, then the rest, alphabetically by last name.
  3. **Koşullu olarak saymak" için **toplam işlevler** içinde:
    SQL
    SELECT
      COUNT(*) AS total,
      SUM(CASE WHEN salary >= 50000 THEN 1 ELSE 0 END) AS senior,
      SUM(CASE WHEN salary <  35000 THEN 1 ELSE 0 END) AS junior
    FROM employees;
    Bu kalıp — SUM(CASE WHEN … THEN 1 ELSE 0 END) — en yaygın olanıdır Kontrol panellerinde kullanılan "koşullu sayım".

"Kompakt" form

Tek bir ifadeyi karşılaştırdığınızda daha kısa bir değişken de vardır kesin değerlere karşı:

SQL
CASE department_id
  WHEN 1 THEN 'Ingegneria'
  WHEN 2 THEN 'Vendite'
  ELSE       'Altro'
END

CASE WHEN department_id = 1 THEN ... WHEN department_id = 2 THEN ... END ile eşdeğerdir, yalnızca daha kompakttır. Yalnızca tam eşitlik için işe yarar: if >= veya başka bir karşılaştırmaya ihtiyacınız var, genişletilmiş bölüme geri dönmelisiniz formu.

Deneyin

Egzersiz#sql.m4.l3.e1
Denemeler: 0Yükleniyor…

Her çalışan için, adını (adını), soyadını (soyadı) ve maaşı en az 50.000 ise 'Alto', aksi takdirde 'Standart' olan bir 'kademe' sütununu gösterin. Üç sütun, çalışan başına bir satır.

Düzenleyici yükleniyor…
İpucu göster

Koşul maaş >= 50000'dir. CASE'i END ile kapatmayı ve 'kademe' takma adını kullanmayı unutmayın.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#sql.m4.l3.e2
Denemeler: 0Yükleniyor…

Her departman (department_id) için, SUM(CASE...) kullanarak kaç çalışanın yüksek maaşa (>= 50000) ve kaçının standart maaşa (< 50000) sahip olduğunu sayın. Üç sütun: departman_id, yüksek, standart. Departman_id'sine göre sıralayın (NULLS LAST).

Düzenleyici yükleniyor…
İpucu göster

SUM(CASE WHEN ... THEN 1 ELSE 0 END) modeli koşullu sayımdır.

3 denemeden sonra çözüm mevcut