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 · SQLite

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи