SQL: CASE, COALESCE и NULLIF — Количество, выручка и категория товара

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

Количество, выручка и категория товара

Что уже дано

Проверяющая система создала SQLite-таблицы products(product_id INTEGER PRIMARY KEY, name TEXT, price INTEGER) и sales(sale_id INTEGER PRIMARY KEY, product_id INTEGER, qty INTEGER NOT NULL) и загрузила данные. Первичные ключи — положительные INTEGER. name — TEXT или NULL, имена могут повторяться. price — цена в копейках от 0 до 1 000 000 либо NULL (неизвестная цена). qty — целое количество от 0 до 10 000, без NULL. product_id в sales может быть NULL или ссылаться на отсутствующий товар; такие продажи не относятся ни к одному товару каталога. В каждой таблице не более 1000 строк; все суммы и произведения помещаются в 64-битный INTEGER.

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

Верните одну строку на каждый товар из products. total_qty — сумма qty его найденных продаж; если продаж нет, это 0. total_revenue — total_qty * price при известной цене (в том числе 0 при отсутствии продаж); при неизвестной цене это NULL независимо от количества. size_label — 'крупный' при total_qty >= 5, иначе 'средний' при total_qty >= 2, иначе 'малый'.

Ввод и вывод

Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно пять столбцов в таком порядке и с такими именами: product_id (INTEGER), name (TEXT или NULL, без подмены), total_qty (INTEGER), total_revenue (INTEGER или NULL), size_label (TEXT из трёх заданных меток). Сортировка по product_id по возрастанию. Пустой каталог даёт пустой результат. В отображении тестов NULL — пустое поле, столбцы разделены |. Допускается любое эквивалентное решение; CASE и COALESCE — изученный способ выразить правила, но конкретная реализация не ограничена.

Пример

Подготовка данных
INSERT INTO products VALUES
(1,'Ноутбук',50000),
(2,'Мышь',800),
(3,'Монитор',15000),
(4,'Кабель',NULL);
INSERT INTO sales VALUES
(1,1,3),
(2,1,2),
(3,2,10),
(4,3,0),
(5,4,5);
Вывод
1|Ноутбук|5|250000|крупный
2|Мышь|10|8000|крупный
3|Монитор|0|0|малый
4|Кабель|5||крупный
РешениеSQL · SQLite

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

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

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