Найти в Дзене

Задача # 5. Разбор задачи по SQL: Подсчёт количества рейсов на самолёте TU-134

Оглавление

SQL — один из ключевых навыков для аналитиков, разработчиков и инженеров данных. На собеседованиях часто дают практические задачи для проверки понимания языка. Разберём типовые задачи и их решения.

Предыдущее задание:

Задача 5. Подсчёт количества рейсов на самолёте TU-134

Условие задачи

Требуется вывести количество рейсов, совершённых на самолёте модели TU-134. Результирующая таблица должна содержать одно поле:

  • count — количество рейсов (использовать конструкцию as count для корректной проверки)

Анализ структуры базы данных

-2

Исходя из предыдущих задач, мы работаем с таблицей:

  • 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'
-3

Пошаговое объяснение:

  1. SELECT count(*) — подсчёт количества строк, удовлетворяющих условию
  2. as "count" — присвоение имени столбцу результата (обязательное требование в задаче)
  3. FROM trip — указание таблицы для выборки данных
  4. 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'
-4

2. Группировка по моделям самолётов

Если нужно посчитать для нескольких моделей:

SELECT plane, count(*) as "count"
FROM trip
GROUP BY plane
-5

3. Добавление дополнительных условий

Например, только определённого периода:

SELECT count(*) as "count"
FROM trip
WHERE plane = 'TU-134'
AND time_out BETWEEN '2023-01-01' AND '2023-12-31'
-6

Оптимизация запроса

Для больших таблиц стоит:

  1. Создать индекс по столбцу plane
  2. Рассмотреть материализованное представление, если запрос выполняется часто

Заключение

Задача демонстрирует базовое использование агрегатной функции COUNT с фильтрацией. Ключевые моменты:

  • Правильное применение COUNT(*)
  • Точное соответствие условиям задачи (именование столбца результата)
  • Учёт особенностей сравнения строк

🔑 Итоговое решение:

SELECT count(*) as "count"
FROM trip
WHERE plane = 'TU-134'
-7