Команда CASE
Команда CASE используется для реализации условной логики
в SQL-запросах. Она позволяет возвращать разные значения
в зависимости от выполнения заданных условий.
Синтаксис
CASE
WHEN condition THEN result
WHEN condition THEN result
ELSE result
END
Таблицы для примеров
| id | name | age | salary |
|---|---|---|---|
| 1 | Ivan | 25 | 40000 |
| 2 | Petr | 30 | 45000 |
| 3 | Sergey | 28 | 42000 |
| 4 | Olga | 35 | 55000 |
| 5 | Dmitry | 40 | 60000 |
Пример
Давайте определим уровень дохода сотрудника на основе значения его зарплаты:
SELECT name, salary,
CASE
WHEN salary < 45000 THEN 'low'
WHEN salary BETWEEN 45000 AND 55000 THEN 'medium'
ELSE 'high'
END AS salary_level
FROM employees
ORDER BY id
Результат выполнения кода:
| name | salary | salary_level |
|---|---|---|
| Ivan | 40000 | low |
| Petr | 45000 | medium |
| Sergey | 42000 | low |
| Olga | 55000 | medium |
| Dmitry | 60000 | high |
Пример
Давайте используем CASE для формирования текстового описания возраста сотрудника:
SELECT name, age,
CASE
WHEN age < 30 THEN 'young'
WHEN age BETWEEN 30 AND 39 THEN 'adult'
ELSE 'senior'
END AS age_group
FROM employees
ORDER BY id
Результат выполнения кода:
| name | age | age_group |
|---|---|---|
| Ivan | 25 | young |
| Petr | 30 | adult |
| Sergey | 28 | young |
| Olga | 35 | adult |
| Dmitry | 40 | senior |
Пример
Давайте используем CASE для сортировки данных по пользовательскому приоритету:
SELECT name, salary
FROM employees
ORDER BY
CASE
WHEN salary >= 55000 THEN 1
WHEN salary >= 45000 THEN 2
ELSE 3
END
salary DESC
Результат выполнения кода:
| name | salary |
|---|---|
| Olga | 55000 |
| Dmitry | 60000 |
| Petr | 45000 |
| Sergey | 42000 |
| Ivan | 40000 |