Туплю не могу решит 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
→ Ссылка