Оператор CASE в PostgreSQL является условным выражением, позволяющим выполнять различные действия в зависимости от заданных условий. CASE аналогичен конструкции IF-ELSE в других языках программирования и применяется в SQL-запросах для гибкого управления выводом данных.
Синтаксис CASE
Простая форма CASE
Используется для сравнения одного выражения с несколькими значениями:
SELECT column_name,
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE result_default
END AS new_column
FROM table_name;
Полная форма CASE
Используется для проверки нескольких разных условий:
SELECT column_name,
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result_default
END AS new_column
FROM table_name;
Примеры использования CASE
Пример простой формы
Запрос с использованием CASE для определения уровня скидки по категории товара:
SELECT product_name,
CASE category
WHEN 'electronics' THEN '10%'
WHEN 'clothing' THEN '20%'
ELSE '5%'
END AS discount
FROM products;
Пример полной формы
Запрос, определяющий статус заказа в зависимости от даты:
SELECT order_id,
CASE
WHEN order_date > NOW() - INTERVAL '7 days' THEN 'новый'
WHEN order_date > NOW() - INTERVAL '30 days' THEN 'недавний'
ELSE 'старый'
END AS order_status
FROM orders;
Использование CASE в фильтрации
Оператор CASE применяется и в условиях фильтрации:
SELECT *
FROM employees
WHERE salary > CASE
WHEN position = 'manager' THEN 5000
ELSE 3000
END;
Этот запрос выбирает сотрудников, чья зарплата выше определённого уровня, зависящего от должности.
Преимущества использования CASE
- Удобство в управлении выводом данных на основе условий.
- Возможность использования внутри различных SQL-команд, таких как SELECT, WHERE, ORDER BY и GROUP BY.
- Улучшение читабельности и понятности запросов.