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: CASE, COALESCE и NULLIF — Доля конверсий по кампаниям
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
