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

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

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

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