SQL: Соединение по диапазону значений — Классификация транзакций по диапазонам
Практическая задача по SQL на тему «Соединение по диапазону значений». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Классификация транзакций по диапазонам
Что уже дано
Уже заполнены transactions(tx_id INTEGER PRIMARY KEY,amount INTEGER) и price_tiers(tier_id INTEGER PRIMARY KEY,label TEXT,range_start INTEGER NOT NULL,range_end INTEGER NOT NULL). Первичные ключи положительны и уникальны. amount — INTEGER от 0 до 2000000000 включительно либо NULL (целые копейки). Границы — INTEGER от 0 до 2000000001, range_start < range_end. Диапазоны [range_start,range_end) глобально не перекрываются; смежные границы и пробелы допустимы. Метка может быть NULL или повторяться, не содержит | и перевода строки. В каждой таблице от 0 до 1000 строк. Проверять отсутствие совпадения нужно по ключу tier_id, а не по метке.
Что нужно сделать
Для каждого события верните tx_id, исходное amount и метку соответствующего диапазона. Событие вне всех диапазонов, включая NULL входного значения, сохраняется с NULL-меткой.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Столбцы в точном порядке: tx_id, amount, label. Одна строка на tx_id, сортировка tx_id ASC; пустая transactions даёт пустой результат. Идентификатор и счётчики — INTEGER без NULL, исходное значение — INTEGER либо NULL, метка — TEXT либо NULL. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO transactions VALUES (1,0),(2,50),(3,99),(4,100),(5,199),(6,200),(7,350),(8,500); INSERT INTO price_tiers VALUES (1,'economy',0,100),(2,'standard',100,200),(3,'premium',200,500);
- Вывод
1|0|economy 2|50|economy 3|99|economy 4|100|standard 5|199|standard 6|200|premium 7|350|premium 8|500|
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
