SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
Практическая задача по SQL на тему «EXPLAIN QUERY PLAN в SQLite». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Сводка ошибок и их доля по сервисам
Что уже дано
Таблица audit_logs(log_id INTEGER PRIMARY KEY, service_name TEXT NOT NULL, event_level TEXT NOT NULL, duration_ms INTEGER NOT NULL). До 500 событий; положительные ID, непустые имена сервисов, event_level — ERROR, INFO или WARN. duration_ms — целое от 0 до 1000000. Сохранённый план исходной сводки ERROR содержит SCAN audit_logs и USE TEMP B-TREE FOR GROUP BY; это иллюстрация исходного запроса, а не требование к физическому плану вашего расширенного отчёта.
Что нужно сделать
Для каждого сервиса хотя бы с одной ERROR верните total_events — число его ERROR-событий, avg_duration_ms — их среднюю длительность без округления. Дополнительно error_share — доля ERROR среди всех событий этого сервиса, округлённая до 4 знаков. INFO и WARN не участвуют в среднем длительностей ошибок, но входят в знаменатель доли. Разные события с одинаковой длительностью учитывайте отдельно.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 4 столбцов в указанном порядке и с этими именами: service_name, total_events, avg_duration_ms, error_share. service_name — TEXT, total_events — INTEGER; avg_duration_ms и error_share — REAL; NULL нет. Сортировка: service_name ASC COLLATE BINARY. Если ERROR нет, результат пустой. Отправляется SELECT/WITH с данными отчёта, команда EXPLAIN не требуется. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO audit_logs VALUES (1,'auth','ERROR',0),(2,'auth','ERROR',1),(3,'auth','INFO',900),(4,'billing','ERROR',10),(5,'billing','WARN',20),(6,'billing','INFO',100),(7,'quiet','INFO',100);
- Вывод
auth|2|0.5|0.6667 billing|1|10.0|0.3333
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: EXPLAIN QUERY PLAN в SQLite — Отбор клиентов и разница с максимальным лимитом
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
