SQL — один из ключевых навыков для аналитиков, разработчиков и инженеров данных. На собеседованиях часто дают практические задачи для проверки понимания языка. Разберём типовые задачи и их решения.
Предыдущее задание:
Задача 5. Подсчёт количества рейсов на самолёте TU-134
Условие задачи
Требуется вывести количество рейсов, совершённых на самолёте модели TU-134. Результирующая таблица должна содержать одно поле:
- count — количество рейсов (использовать конструкцию as count для корректной проверки)
Анализ структуры базы данных
Исходя из предыдущих задач, мы работаем с таблицей:
- Trip — содержит информацию о рейсах, включая модель самолёта
Cтруктура таблицы Trip:
- id — номер рейса (PK)
- company — ID авиакомпании
- plane — модель самолёта (нас интересует значение 'TU-134')
- town_from — город отправления
- town_to — город прибытия
- time_out — время вылета
- time_in — время прилёта
Разбор решения
Основной запрос
SELECT count(*) as "count"
FROM trip
WHERE plane = 'TU-134'
Пошаговое объяснение:
- SELECT count(*) — подсчёт количества строк, удовлетворяющих условию
- as "count" — присвоение имени столбцу результата (обязательное требование в задаче)
- FROM trip — указание таблицы для выборки данных
- WHERE plane = 'TU-134' — условие фильтрации только рейсов на самолёте TU-134
Особенности решения
1. Использование COUNT(*)
Функция COUNT(*) подсчитывает все строки, соответствующие условию WHERE. Альтернативы:
- COUNT(1) — аналогичный результат
- COUNT(plane) — подсчёт только строк с не-NULL значениями в столбце plane
В нашем случае разницы нет, так как:
- Мы уже фильтруем по plane = 'TU-134'
- NULL значения не пройдут условие WHERE
2. Оформление имени столбца
Требование использовать as "count" важно для:
- Соответствия формату проверки
- Читаемости результата
- Возможности ссылаться на этот столбец в других частях запроса
3. Условие сравнения
Используется строгое равенство plane = 'TU-134'. Важно:
- Учитывать регистр (если СУБД регистрозависима)
- Точно знать формат хранения данных
Возможные модификации запроса
1. Регистронезависимый поиск
Если есть сомнения в регистре:
SELECT count(*) as "count"
FROM trip
WHERE UPPER(plane) = 'TU-134'
2. Группировка по моделям самолётов
Если нужно посчитать для нескольких моделей:
SELECT plane, count(*) as "count"
FROM trip
GROUP BY plane
3. Добавление дополнительных условий
Например, только определённого периода:
SELECT count(*) as "count"
FROM trip
WHERE plane = 'TU-134'
AND time_out BETWEEN '2023-01-01' AND '2023-12-31'
Оптимизация запроса
Для больших таблиц стоит:
- Создать индекс по столбцу plane
- Рассмотреть материализованное представление, если запрос выполняется часто
Заключение
Задача демонстрирует базовое использование агрегатной функции COUNT с фильтрацией. Ключевые моменты:
- Правильное применение COUNT(*)
- Точное соответствие условиям задачи (именование столбца результата)
- Учёт особенностей сравнения строк
🔑 Итоговое решение:
SELECT count(*) as "count"
FROM trip
WHERE plane = 'TU-134'