Посчитаем количество человек в каждом бронировании, а затем число бронирований для каждого количества.
=> SELECT tt.cnt, count(*) FROM ( SELECT count(*) cnt FROM tickets t GROUP BY t.book_ref ) tt GROUP BY tt.cnt ORDER bY tt.cnt;
cnt | count -----+--------- 1 | 1388875 2 | 613356 3 | 101440 4 | 7245 5 | 194 (5 rows)
Найдем города, куда можно добраться, и выведем все остальные.
=> SELECT a.city FROM airports a EXCEPT SELECT arr.city FROM airports dep, airports arr, flights f WHERE dep.city = 'Москва' AND f.departure_airport = dep.airport_code AND f.arrival_airport = arr.airport_code;
city ---------------------- Калуга Когалым Якутск Новокузнецк Сургут Иркутск Удачный Кызыл Стрежевой Ярославль Иваново Усть-Кут Магадан Чита Череповец Комсомольск-на-Амуре Усть-Илимск Москва Благовещенск Ухта Нижнекамск (21 rows)
Интересно, что из Москвы в Москву без пересадок добраться не получится.
=> SELECT a.model, f.cnt FROM aircrafts a LEFT JOIN ( SELECT f.aircraft_code, count(*) cnt FROM flights f GROUP BY f.aircraft_code ) f ON f.aircraft_code = a.aircraft_code ORDER BY cnt DESC NULLS LAST;
model | cnt ---------------------+------- Сессна 208 Караван | 60196 Бомбардье CRJ-200 | 58611 Сухой Суперджет-100 | 55213 Аэробус A321-200 | 12672 Боинг 737-300 | 8263 Аэробус A319-100 | 8032 Боинг 767-300 | 7920 Боинг 777-300 | 3960 Аэробус A320-200 | (9 rows)
Больше всех трудится маленькая Сессна, а одна модель авиапарка вообще не используется на рейсах.
Число пассажиров на рейсе можно посчитать по посадочным талонам.
=> SELECT a.model, count(*) cnt FROM flights f, boarding_passes bp, aircrafts a WHERE bp.flight_id = f.flight_id AND a.aircraft_code = f.aircraft_code GROUP BY a.model ORDER BY count(*) DESC;
model | cnt ---------------------+--------- Сухой Суперджет-100 | 2767457 Бомбардье CRJ-200 | 1155683 Боинг 777-300 | 1111547 Боинг 767-300 | 945568 Аэробус A321-200 | 777370 Боинг 737-300 | 649730 Аэробус A319-100 | 407361 Сессна 208 Караван | 111096 (8 rows)