Налейте аналитику
918 subscribers
43 photos
2 files
33 links
Мысли вслух лида аналитики ЛитРес, уроки по SQL/Python для новичков и не только, рассуждения о том, как делать надо и главное - как не надо, что должен уметь начинающий аналитик и чем дата-саентист отличается от дата-инженера

karaulovandrey@yandex.ru
Download Telegram
Разбор задачи SQL №16 (с ошибкой)

#SQL_trainer8

Задача номер 16. Вывести отсортированный по количеству перелетов (по убыванию) и имени (по возрастанию) список пассажиров, совершивших хотя бы 1 полет.

В этой задачке тренажер обхитрил сам себя ) сейчас все расскажу
Как уже было упомянуто, задачка интересна тем, что в ней есть ошибка в онлайн-тренажере. Для начала - как бы я решал эту задачу. Запрос несложный, но... неправильный!
SELECT

p.name,

COUNT(DISTINCT pit.trip) AS count

FROM Pass_in_trip AS pit

JOIN Passenger AS p ON p.id = pit.passenger

GROUP BY p.id

ORDER BY count DESC, p.name ASC
В разборе задачи №5 я писал, что COUNT(DISTINCT id) лучше, чем COUNT(*), т.к. помогает в том числе избежать дублей при джоинах. В текущей задаче дублей при джойнах не наблюдается, но все равно пример показательный. Видим, что для пассажира 'Michael Caine' COUNT(DISTINCT trip) дал результат 3, а COUNT(*) = 4.
Лезем дальше в таблицы. Пропускаю этап, где я определил, что id этого пассажира Passenger.id = 14, и что мы видим по нему в таблице Pass_in_trip? Видим, что на одном рейсе 7771 он купил 2 места! Поэтому COUNT(DISTINCT trip) = 3, а COUNT(*) = 4.
Я абсолютно уверен, что тренажер, подсунув эту задачку с небольшой хитростью, обманул сам себя. Пассажир совершил 3 полета, но чтобы получить выполнение задания, нужно в запросе поставить COUNT(*), который вернет для этого пассажира число 4. Ай-яй-яй, тренажер!
Налейте аналитику pinned «#дайджест В последнее время все посты выходили по теме разбора простеньких задач из тренажера SQL (уже скоро начнутся задачи поинтереснее), поэтому предыдущие посты немного затерялись, возможно, часть аудитории о них и не знает ) Поэтому небольшой дайджест…»
Налейте аналитику pinned «#дайджест В последнее время все посты выходили по теме разбора простеньких задач из тренажера SQL (уже скоро начнутся задачи поинтереснее), поэтому предыдущие посты немного затерялись, возможно, часть аудитории о них и не знает ) Поэтому небольшой дайджест…»