Код IT
← Каталог

Общие табличные выражения (CTE) — Повторное использование промежуточных результатов

Фрагмент из «Общие табличные выражения (CTE)»: Повторное использование промежуточных результатов.

SQL main.sql
WITH активные_клиенты AS (
    SELECT 
        client_id,
        client_name,
        registration_date,
        last_order_date,
        total_orders
    FROM клиенты
    WHERE статус = 'активный'
    AND last_order_date >= CURRENT_DATE - INTERVAL '180 days'
)
SELECT 
    'премиум' AS сегмент,
    COUNT(*) AS количество,
    SUM(total_orders) AS общее_количество_заказов
FROM активные_клиенты
WHERE total_orders > 20

UNION ALL

SELECT 
    'стандарт' AS сегмент,
    COUNT(*) AS количество,
    SUM(total_orders) AS общее_количество_заказов
FROM активные_клиенты
WHERE total_orders BETWEEN 5 AND 20

UNION ALL

SELECT 
    'начинающие' AS сегмент,
    COUNT(*) AS количество,
    SUM(total_orders) AS общее_количество_заказов
FROM активные_клиенты
WHERE total_orders < 5;
WITH активные_клиенты AS (
    SELECT 
        client_id,
        client_name,
        registration_date,
        last_order_date,
        total_orders
    FROM клиенты
    WHERE статус = 'активный'
    AND last_order_date >= CURRENT_DATE - INTERVAL '180 days'
)
SELECT 
    'премиум' AS сегмент,
    COUNT(*) AS количество,
    SUM(total_orders) AS общее_количество_заказов
FROM активные_клиенты
WHERE total_orders > 20

UNION ALL

SELECT 
    'стандарт' AS сегмент,
    COUNT(*) AS количество,
    SUM(total_orders) AS общее_количество_заказов
FROM активные_клиенты
WHERE total_orders BETWEEN 5 AND 20

UNION ALL

SELECT 
    'начинающие' AS сегмент,
    COUNT(*) AS количество,
    SUM(total_orders) AS общее_количество_заказов
FROM активные_клиенты
WHERE total_orders < 5;