Туплю не могу решит SQL
Выведите имена всех пар пассажиров, летевших вместе на одном рейсе два или более раз, и количество таких совместных рейсов. В passengerName1 разместите имя пассажира с наименьшим идентификатором.
https://sql-academy.org/ru/trainer/tasks/64
SELECT DISTINCT A.name AS passengerName1, B.name AS passengerName2, COUNT(trip) AS count FROM Passenger AS A, Passenger B
INNER JOIN Pass_in_trip ON B.id = Pass_in_trip.passenger
WHERE trip in
(SELECT trip FROM Pass_in_trip
GROUP BY trip HAVING COUNT(passenger) > 1)
Ответы (1 шт):
Автор решения: Victor Ishkov
→ Ссылка
Можно, например, решить так:
SELECT
x.passenger1_name passengerName1,
x.passenger2_name passengerName2,
COUNT(*) count
FROM (
SELECT
p1.id passenger1_id,
p1.name passenger1_name,
p2.id passenger2_id,
p2.name passenger2_name
FROM pass_in_trip pit1
INNER JOIN passenger p1 ON pit1.passenger = p1.id
INNER JOIN pass_in_trip pit2 ON pit1.trip = pit2.trip AND pit1.passenger < pit2.passenger
INNER JOIN passenger p2 ON pit2.passenger = p2.id
GROUP BY pit1.trip, p1.id, p1.name, p2.id, p2.name
) x
GROUP BY x.passenger1_id, x.passenger1_name, x.passenger2_id, x.passenger2_name
HAVING COUNT(*) > 1