Умовністандарт SQL

CASE

Повертає різні значення залежно від умов — «якщо… то… інакше» в SQL.

Синтаксис

CASE WHEN <умова> THEN <результат> … ELSE <інакше> END
CASE <вираз> WHEN <значення> THEN <результат> … ELSE <інакше> END

Це не функція, а вираз, але пишуть його там само, де й функції. Умови перевіряються зверху вниз, і спрацьовує перша правдива; якщо не підійшла жодна, береться ELSE, а без нього — NULL. Друга форма коротша: порівнює один вираз із переліком значень.

Дані для прикладів

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Рівень зарплати
SELECT name, salary,
CASE
WHEN salary >= 1200 THEN 'high'
WHEN salary >= 1000 THEN 'medium'
ELSE 'low'
END AS level
FROM employees;
namesalarylevel
Emma1200high
Liam1000medium
Olivia1350high
Noah950low
Sophia1200high
Коротка форма — перелік значень
SELECT name,
CASE department
WHEN 'backend' THEN 'Server'
WHEN 'frontend' THEN 'Web'
ELSE 'Other'
END AS team
FROM employees;
nameteam
EmmaServer
LiamServer
OliviaWeb
NoahWeb
SophiaOther
Підрахунок за умовою в кожному відділіСкладніше
SELECT department,
COUNT(*) AS people,
SUM(CASE WHEN bonus IS NULL THEN 0 ELSE 1 END) AS with_bonus
FROM employees
GROUP BY department
ORDER BY department;
departmentpeoplewith_bonus
backend21
design11
frontend21

Для кожного рядка CASE дає 1 або 0, а SUM їх додає — виходить кількість людей із бонусом.

Зверни увагу

Спрацьовує перша правдива умова. Постав WHEN salary >= 1000 вище за WHEN salary >= 1200 — і рівня high не отримає ніхто.

Коротка форма порівнює через =, тож CASE bonus WHEN NULL THEN … не спрацює ніколи: NULL не дорівнює навіть NULL. Пиши повну форму: CASE WHEN bonus IS NULL THEN ….

Усі гілки мають повертати сумісний тип: CASE WHEN … THEN 1 ELSE 'none' END дасть помилку invalid input syntax for type integer.

Схожі функції