Все привет!
Помогите , пожалуйста, написать корректный запрос на задание
Выведите количество полётов каждого пассажира, представленного в таблице Passenger. Список полётов находится в таблице Pass_in_trip.
В качестве результата выведите количество полётов (используйте псевдоним count) и имя пассажира.
Мой запрос корректен. Но в задаче спецом сделан подвох. Есть еще Bruce Willis но с другим id из таблицы Passenger. И конечно, при группировке он вылетает. И я должен использовать технику вложенного запроса select внутри select, но я не знаю как. Уже второй день парюсь


>И я должен использовать технику вложенного запроса select внутри select, но я не знаю как
Не должен. Просто сделай этот запрос, а группировку сделай по имени, примерно так:
SEELCT P.NAME, COUNT(*)
FROM PASS_IN_TRIP T
INNER JOIN PASSENGER P ON T.PASSENGER=P.ID
GROUP BY P.NAME
>И конечно, при группировке он вылетает.
Ничего тут никуда не "вылетает". Сказано группировать по имени - значит, идентификатор в данном запросе это имя.
Как ты до соединений дошел, если со скалярными подзапросами проблемы?
select
p.name name,
(select count(pt.id) from pass_in_trip pt where pt.passenger = p.id) count
from passenger p
В твоем же варианте нужно группировать по id, а не по name, потому как "Плюс Уиллис" (два полных тезки). И да, группировать можно по полю не из выборки.
select name, count(passenger) count
from passenger
left join pass_in_trip on passenger.id = pass_in_trip.passenger
group by passenger.id
Вложенный запрос будет делаться согласно задаче, как понимаю это c SQL academy
SELECT name,
(select count (id) from Pass_in_trip where passenger=Passenger.id ) as count
FROM Passenger;
Решила данную задачу двумя способами (оба прошли)
1) Через объединение двух таблиц и группировку по id пассажиров (по именам не работает, ибо там два тёски Брюса Уилисса)
SELECT COUNT(trip) AS count , name
FROM Passenger
LEFT JOIN Pass_in_trip
ON
Passenger.id = Pass_in_trip.passenger
GROUP BY
Passenger.id
2) Через вложенный скалярный подзапрос, связанный с внешним в условии (согласно заданию)
SELECT (
SELECT COUNT(trip)
FROM Pass_in_trip
WHERE passenger =
Passenger.id
) AS count , name
FROM Passenger
https://sql-academy.org/ru/guide/nested-sql-queries
SELECT Name, COUNT(Pass_in_trip.passenger) as count
FROM Passenger
LEFT JOIN Pass_in_Trip ON passenger = Passenger.id
GROUP BY Passenger.id
Да он работает, НО в задании хотят select внутри select. И это тоже бы хотелось понимать