SQL: Сверка отчётов по ключам и показателям — Состав договоров и число неопознанных оплат

Практическая задача по SQL на тему «Сверка отчётов по ключам и показателям». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.

Состав договоров и число неопознанных оплат

Что уже дано

Таблицы contracts(contract_id INTEGER PRIMARY KEY) и payments(payment_id INTEGER PRIMARY KEY, contract_id INTEGER NOT NULL). До 500 строк в каждой. ID положительные. Оплата может ссылаться на отсутствующий договор; несколько оплат одного договора являются разными записями.

Что нужно сделать

Сверьте состав ключей с обеих сторон. Выведите по одной строке для каждого contract_id, который есть только в одной стороне. discrepancy_type — missing_in_payments для договора без единой оплаты либо missing_in_contracts для оплат неизвестного договора. payment_count — число записей payments с этим contract_id; для договора без оплат 0. Известный договор хотя бы с одной оплатой не является расхождением.

Ввод и вывод

Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 3 столбцов в указанном порядке и с этими именами: contract_id, discrepancy_type, payment_count. contract_id и payment_count — INTEGER; discrepancy_type — TEXT; NULL нет. Сортировка: contract_id ASC. При совпадении наборов ключей результат пустой. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.

Пример

Подготовка данных
INSERT INTO contracts VALUES (1),(2),(4);
INSERT INTO payments VALUES (1,1),(2,3),(3,3),(4,5);
Вывод
2|missing_in_payments|0
3|missing_in_contracts|2
4|missing_in_payments|0
5|missing_in_contracts|1
РешениеSQL · SQLite

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

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

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