SQL: Логический порядок выполнения SQL — Регион с наибольшей суммой оплаченных заказов
Практическая задача по SQL на тему «Логический порядок выполнения SQL». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Регион с наибольшей суммой оплаченных заказов
Что уже дано
В SQLite уже созданы и заполнены таблицы clients(client_id INTEGER PRIMARY KEY, region TEXT NOT NULL COLLATE BINARY) и orders(order_id INTEGER PRIMARY KEY, client_id INTEGER, status TEXT, amount INTEGER NOT NULL). Идентификаторы клиентов и заказов — положительные INTEGER; первичные ключи уникальны. region — непустой код региона из латинских букв A–Z и a–z; несколько клиентов могут иметь один регион. status равен 'paid', 'new', 'cancelled' или NULL. amount — целая сумма в копейках от 0 до 2 000 000 000, без NULL. client_id в orders может быть NULL или ссылаться на отсутствующего клиента. В каждой таблице не более 1000 строк; сумма помещается в 64-битный INTEGER.
Что нужно сделать
Найдите один регион с наибольшей суммой оплаченных заказов (status='paid'), для которых найден клиент с равным client_id. Суммируйте все такие заказы всех клиентов региона по одному разу. При равной сумме выберите первый код региона по возрастанию с сопоставлением BINARY (регистр значим). Если найденных оплаченных заказов нет, результат пуст. Нулевые суммы допустимы.
Ввод и вывод
Отправьте один SELECT или WITH-запрос. stdin и печать не используются. Верните ровно два столбца в порядке region (TEXT), total (INTEGER), с указанными именами и без NULL. Результат содержит не более одной строки. В тестах столбцы разделены |. Допустим любой эквивалентный запрос: оконная функция и CTE не обязательны. Если используете окно, помните о границе между вычислением его результата и фильтрацией на другом уровне запроса.
Пример
- Подготовка данных
INSERT INTO clients VALUES (10,'North'), (20,'South'), (30,'North'), (40,'Center'); INSERT INTO orders VALUES (1,10,'paid',600), (2,10,'paid',500), (3,20,'paid',1200), (4,30,'cancelled',800), (5,30,'paid',300), (6,40,'paid',1000);
- Вывод
North|1400
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
