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
CASE
WHEN condition_1 THEN value_1
WHEN condition_2 THEN value_2
...
ELSE default_value
ENDHerhangi 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.
-- 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:
SELECTiçinde türetilmiş sütunlar oluşturmak için (yukarıdaki örnek).- "Özel" sıralama için
ORDER BYiçinde:SQLORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name; -- Engineering first, then the rest, alphabetically by last name. - **Koşullu olarak saymak" için **toplam işlevler** içinde:
Bu kalıp —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;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şı:
CASE department_id
WHEN 1 THEN 'Ingegneria'
WHEN 2 THEN 'Vendite'
ELSE 'Altro'
ENDCASE 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
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.
İ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
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).
İpucu göster
SUM(CASE WHEN ... THEN 1 ELSE 0 END) modeli koşullu sayımdır.
3 denemeden sonra çözüm mevcut