SQL: EXPLAIN QUERY PLAN в SQLite — Отбор клиентов и разница с максимальным лимитом
Практическая задача по SQL на тему «EXPLAIN QUERY PLAN в SQLite». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Отбор клиентов и разница с максимальным лимитом
Что уже дано
Таблица customers(customer_id INTEGER PRIMARY KEY, region TEXT NOT NULL, status TEXT NOT NULL, credit_limit INTEGER NOT NULL). До 500 клиентов; ID положительные, region — NORTH, SOUTH или WEST, status — ACTIVE либо INACTIVE, лимит — целое от 0 до 1000000. Сохранённый план исходной выборки содержит SCAN customers и USE TEMP B-TREE FOR ORDER BY. Вы расширяете данные этой выборки; конкретный план расширенного запроса не проверяется.
Что нужно сделать
Выведите всех ACTIVE-клиентов NORTH с credit_limit строго больше 50000. Сохраните customer_id, region, credit_limit. Дополнительно credit_gap — разность между наибольшим лимитом среди этих же подходящих клиентов и лимитом данной строки. Клиенты других регионов и статусов не влияют на максимум. При равных лимитах сохраняйте всех клиентов.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 4 столбцов в указанном порядке и с этими именами: customer_id, region, credit_limit, credit_gap. region — TEXT; остальные столбцы INTEGER; NULL нет. Сортировка: credit_limit DESC, customer_id ASC. Если подходящих клиентов нет, результат пустой. Отправляется запрос данных, EXPLAIN не нужен. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO customers VALUES (1,'NORTH','ACTIVE',60000),(2,'NORTH','ACTIVE',90000),(3,'NORTH','INACTIVE',200000),(4,'SOUTH','ACTIVE',300000),(5,'NORTH','ACTIVE',50000);
- Вывод
2|NORTH|90000|0 1|NORTH|60000|30000
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
