Conditional aggregation: pivot статусов заказов в одну строку на юзера
Средняя
pivot
Ozon
Условие задачи
Таблица orders (id, user_id, status TEXT) — статусы: paid, refunded, cancelled. Для каждого юзера выведите user_id, total_orders, paid_count, refunded_count, cancelled_count. Сортировка по user_id.
Схема данных
CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, status TEXT);
Темы
CASE PIVOT GROUP BY AGGREGATION
Подсказки
- SUM(CASE WHEN status = X THEN 1 ELSE 0 END) — стандартный pivot pattern
- COUNT(CASE WHEN ... THEN 1 END) тоже работает (NULL не считается)
- В PostgreSQL: COUNT(*) FILTER (WHERE status = X) — короче
Решить в интерактивной SQL-песочнице →
← Все SQL-задачи