129 подписчиков

Разбор задачи SQL №5

2,6K прочитали
Продолжаем цикл статей с разбором задач из онлайн-тренажера. На очереди пятая задача.

Продолжаем цикл статей с разбором задач из онлайн-тренажера. На очереди пятая задача.

В SQL, помимо прочего, работают многие операторы, знакомые каждому школьнику с уроков информатики - SUM, COUNT, AVG, MIN/MAX, ROUND, ABS и прочие.

В пятой задаче нам как раз потребуется оператор COUNT для того, чтобы
вывести количество рейсов, совершенных на TU-134.

Продолжаем цикл статей с разбором задач из онлайн-тренажера. На очереди пятая задача.-2

Для начала, как и в предыдущей задаче, найдем обозначение TU-134 в таблице Trip с помощью запроса SELECT * FROM Trip LIMIT 10.

Продолжаем цикл статей с разбором задач из онлайн-тренажера. На очереди пятая задача.-3

Никаких сюрпризов. Нужный нам самолет обозначен банально 'TU-134'. Нужно обратить внимание, что в задаче просят, чтобы результирующее поле носило имя count, что достигается использованием конструкции AS в блоке SELECT. Поэтому результирующий запрос будет таким:

SELECT

COUNT(*) AS count

FROM Trip

WHERE

plane = 'TU-134'

Продолжаем цикл статей с разбором задач из онлайн-тренажера. На очереди пятая задача.-4

Что еще важно отметить. COUNT(*) посчитает все строки в таблице с учетом заданных условий. При использовании простых запросов к одной таблице без JOIN-ов COUNT(*) можно использовать, не задумываясь. Но если запрос сложный, происходит объединение и работа с несколькими таблицами, есть риск получить задвоенные/затроенные/заNенные цифры в ответе. Почему это может происходить коснемся в задаче, где появится первый JOIN.

Поэтому для надежности вычислений COUNT(*) можно замерить на COUNT(DISTINCT уникальный ключ), немного преобразовав запрос:

SELECT

COUNT(DISTINCT id) AS count

FROM Trip

WHERE

plane = 'TU-134'

Продолжаем цикл статей с разбором задач из онлайн-тренажера. На очереди пятая задача.-5

Спасибо за прочтение ) подписывайтесь на телеграм