Сортировка пассажиров по количеству полетов

Нужно добавить id пассажира в SELECT и GROUP BY. Группировка только по имени ошибочно объединяет разных пассажиров с одинаковыми именами; INNER JOIN исключит тех, кто не летал.

Короткий ответ

Что ответить на собеседовании

Нужно добавить id пассажира в SELECT и GROUP BY. Группировка только по имени ошибочно объединяет разных пассажиров с одинаковыми именами; INNER JOIN исключит тех, кто не летал.

Подробный разбор

Ответ с пояснениями

Условие

Сортировка пассажиров по количеству полетов

Вывести идентификатор, имя и количество перелётов каждого пассажира, совершившего хотя бы 1 полёт. Результат отсортировать по количеству перелётов (по убыванию) и имени (по возрастанию).

Используйте конструкцию "as count" для агрегатной функции подсчета количества перелетов. Это необходимо для корректной проверки.

Поля в результирующей таблице: id, name, count

Код из скрипта: SELECT Passenger.name AS name, COUNT(Pass_in_trip.id) AS count FROM Passenger JOIN Pass_in_trip ON Passenger.id = Pass_in_trip.passenger GROUP BY Passenger.name ORDER BY count DESC, name ASC;

Ответ

Нужно добавить id пассажира в SELECT и GROUP BY. Группировка только по имени ошибочно объединяет разных пассажиров с одинаковыми именами; INNER JOIN исключит тех, кто не летал.

Запрос для указанной схемы:

SELECT Passenger.id AS id,
       Passenger.name AS name,
       COUNT(*) AS count
FROM Passenger
JOIN Pass_in_trip
  ON Passenger.id = Pass_in_trip.passenger
GROUP BY Passenger.id, Passenger.name
ORDER BY count DESC, name ASC;

Здесь предполагается, что одна строка Pass_in_trip соответствует одному перелёту пассажира. Поэтому COUNT(*) считает нужные записи. Для полной детерминированности при совпадении количества и имени можно дополнительно сортировать по id, если это допускает проверка задачи.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее