Условное заполнение колонок в MySQL: Case Statement
Быстрый ответ
В MySQL условный оператор CASE
предоставляет возможность реализации условной логики в SQL-запросах, что позволяет присваивать данные в соответствии с заданными условиями:
SELECT employee_id,
CASE
WHEN salary < 3000 THEN 'Начальный уровень'
WHEN salary <= 7000 THEN 'Средний уровень'
ELSE 'Ведущий уровень'
END AS experience_level
FROM employees;
Выполнив этот запрос, мы получим идентификатор employee_id
каждого сотрудника и классифицируем его уровень опыта experience_level
в зависимости от размера его заработной платы salary
.
Портативность и специфические для MySQL функции
При использовании стандартного SQL-синтаксиса, особенно при работе с условным оператором CASE
, достигается максимальная переносимость запросов между различными SQL-системами. Функции, уникальные для MySQL, такие как IF()
, могут быть более интуитивно понятными, однако тем не менее, CASE
обеспечивает беспрепятственный переход между разными базами данных.
Пример запроса с использованием функции IF()
:
SELECT employee_id,
IF(salary < 3000, 'Начальный уровень',
IF(salary <= 7000, 'Средний уровень',
'Ведущий уровень')) AS experience_level
FROM employees;
Экспериментируйте с различными запросами и сценариями данных, чтобы проверить преимущества использования условного оператора CASE
, который позволяет точно контролировать сложные условия.
Обработка неподходящих условий и задание значений по умолчанию
С помощью ELSE
в конструкции CASE
можно задать значение по умолчанию, что гарантирует присваивание результата каждой отдельной строке. Это помогает избежать проблем с пустыми полями, которые могут возникнуть при анализе данных.
SELECT product_id,
CASE
WHEN quantity > 50 THEN 'Массовый запас'
WHEN quantity > 10 THEN 'Достаточный запас'
ELSE 'Низкий запас'
END AS stock_status
FROM products;
Визуализация
Применим наш условный оператор CASE
в кулинарном контексте!
SELECT Dish,
CASE
WHEN main_ingredient = 'Tomato' THEN 'Томатный суп'
WHEN main_ingredient = 'Chicken' THEN 'Жареное куриное бедро'
WHEN main_ingredient = 'Eggplant' THEN 'Блюдо из баклажанов'
ELSE 'Свежий салат'
END AS 'Meal'
FROM Kitchen;
Оператор CASE
действует как секретный ингредиент,раскрывающий настоящее мастерство шеф-повара.
CASE во всей красе: погружаемся в детали
Комбинирование условий с AND, OR и другими!
CASE
идеально подходит для обработки множественных условий, вложенных конструкций и логических операторов типа AND
и OR
:
SELECT customer_id,
CASE
WHEN age < 20 AND student = 'yes' THEN 'Скидка для молодых студентов'
WHEN age BETWEEN 20 AND 65 THEN 'Стандартная цена'
ELSE 'Скидка для пенсионеров'
END AS pricing_tier
FROM customers;
Не нашлось подходящих условий? Задействуем нули!
Используя CASE
, можно обрабатывать случаи с NULL, присваивая нулевое значение, когда нет подходящих условий:
SELECT product_id,
CASE
WHEN is_discounted THEN discount_value
ELSE 0
END AS discount_applied
FROM products;
Особенности обработки NULL
Следует быть внимательными при работе с NULL
в CASE
: в MySQL NULL
интерпретируется как значение, не соответствующее ни одному из условий WHEN
. Используйте эту особенность с осторожностью:
SELECT user_id,
CASE
WHEN last_login_date IS NULL THEN 'Никогда не входил в систему'
ELSE 'Активный пользователь'
END AS user_status
FROM users;
Полезные материалы
- MySQL :: Руководство по ссылке MySQL 8.0 :: 15.6.5.1 Оператор CASE — подробное описание условного оператора
CASE
от разработчиков MySQL. - Самые новые вопросы "mysql+case" – Stack Overflow — сборник практических вопросов и ответов, касающихся использования
CASE
в MySQL. - sql – Значения NULL внутри условия NOT IN – Stack Overflow — обсуждение нюансов обработки
NULL
в SQL запросах. - SQL CASE Expression — детальное объяснение синтаксиса и использования условного оператора
CASE
.