SQL: Индексы для равенства и диапазона — Закрытые заявки за период
Практическая задача по SQL на тему «Индексы для равенства и диапазона». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Закрытые заявки за период
Что уже дано
Таблица tickets(ticket_id INTEGER PRIMARY KEY, client_id INTEGER NOT NULL, priority INTEGER NOT NULL, status TEXT NOT NULL, created_at TEXT NOT NULL). До 500 заявок; положительные ID, priority от 1 до 5, status — closed или open. created_at — корректная UTC-дата 2024 года в формате YYYY-MM-DD либо YYYY-MM-DD HH:MM:SS. Автором создан индекс по created_at.
Что нужно сделать
Для каждого клиента с закрытыми заявками за период от 2024-05-01 включительно до 2024-05-15 исключительно верните closed_tickets_count — число таких заявок и avg_priority — их средний приоритет, округлённый до двух знаков. Каждая заявка учитывается отдельно. Индекс не меняет правила отбора и агрегирования; конкретный план или время выполнения не проверяются.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 3 столбцов в указанном порядке и с этими именами: client_id, closed_tickets_count, avg_priority. client_id и closed_tickets_count — INTEGER, avg_priority — REAL; NULL нет. Сортировка: closed_tickets_count DESC, client_id ASC. Если подходящих заявок нет, результат пустой. Отправляйте запрос отчёта, без CREATE INDEX или EXPLAIN. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO tickets VALUES (1,10,1,'closed','2024-05-01 00:00:00'),(2,10,4,'closed','2024-05-14 23:59:59'),(3,20,2,'closed','2024-05-02 10:00:00'),(4,20,4,'closed','2024-05-03 10:00:00'),(5,10,5,'open','2024-05-05 10:00:00'),(6,30,3,'closed','2024-05-15 00:00:00'),(7,30,3,'closed','2024-04-30 23:59:59'),(8,40,2,'closed','2024-05-03 09:00:00');
- Вывод
10|2|2.5 20|2|3.0 40|1|2.0
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
