CASE в PostgreSQL: условные выражения

Оператор 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.
  • Улучшение читабельности и понятности запросов.