Посчитаем количество человек в каждом бронировании, а затем число бронирований для каждого количества.
=> 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)