SQL: Гранулярность результата и уникальность ключа — Сумма заказов по клиентам
Практическая задача по SQL на тему «Гранулярность результата и уникальность ключа». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Сумма заказов по клиентам
Что уже дано
Проверяющая система создаёт SQLite-таблицы clients(client_id INTEGER PRIMARY KEY, client_name TEXT) и orders(order_id INTEGER PRIMARY KEY, client_id INTEGER, order_date TEXT NOT NULL, total INTEGER NOT NULL). Данные уже загружены. В clients client_id — положительный идентификатор; разные клиенты могут иметь одинаковые имена. client_name может быть NULL. В orders client_id может быть NULL или ссылаться на отсутствующего клиента. Суммы total заданы целыми числами в копейках от 0 до 2 000 000 000, без NULL. В каждой таблице не более 1000 строк; сумма помещается в 64-битный INTEGER. Даты — непустой TEXT в формате YYYY-MM-DD (календарная дата UTC), без NULL. Идентификаторы заказов уникальны и положительны; client_id, если не NULL, — положительный INTEGER.
Что нужно сделать
Напишите запрос: одна строка на каждого клиента из clients, у которого найден хотя бы один заказ с равным client_id. Верните сумму всех его заказов. Клиентов без найденных заказов и заказы без найденного клиента не включайте. Ключ результата — client_id.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно три столбца в таком порядке: client_id (INTEGER), client_name (TEXT или NULL, исходное имя без замены), total_sum (INTEGER). Имена выходных столбцов — как указано. Строки отсортированы по client_id по возрастанию. Если подходящих клиентов нет, результат пуст. В отображении тестов NULL выглядит как пустое поле, столбцы разделены |. Допускается любое эквивалентное решение.
После решения можно самостоятельно обернуть результат в CTE и проверить повторы client_id через GROUP BY/HAVING; на проверку отправляется сам отчёт, а не диагностический запрос.
Пример
- Подготовка данных
INSERT INTO clients VALUES (1,'Аня'), (2,'Борис'), (3,'Вера'); INSERT INTO orders VALUES (101,1,'2026-01-10',600), (102,1,'2026-01-10',400), (103,1,'2026-01-11',200), (104,2,'2026-01-10',900), (105,999,'2026-01-10',700);
- Вывод
1|Аня|1200 2|Борис|900
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Коррелированные подзапросы и EXISTS — Клиенты с завершённым заказом от 1000
- SQL: RFM-анализ на дату среза — RFM и покупки за последний месяц
- SQL: Взвешенное среднее и агрегация показателей — Общий средний чек через агрегаты категорий
- SQL: Выделение пользовательских сессий — Номер сессии и позиция клика
