Глава 6. Запросы
если не прибегнуть к группировке по этому столбцу, то при формировании масси-
ва дней недели в этом массиве будут многократные вхождения каждого дня недели,
когда этот рейс летает. В этом подзапросе присутствует и предложение ORDER BY,
в которое включен столбец days_of_week. Это необходимо для того, чтобы агре-
гатная функция array_agg собрала номера дней недели в массив в возрастающем
порядке этих номеров.
Во внешнем запросе вызывается функция array_agg, которая агрегирует номера
дней недели, содержащиеся в сгруппированных строках, в массивы целых чисел.
На этом работа конструкции WITH f3 AS (...) завершается. В результате вместо
нескольких строк в таблице flights, соответствующих вылетам конкретного рейса
в различные дни недели, формируется одна строка в представлении routes, в этой
строке все дни недели, в которые выполняется конкретный рейс, собраны в массив
целых чисел.
И, наконец, главный запрос выполняет соединение временной таблицы f3 с таб-
лицей «Аэропорты» (airports), причем дважды. Это нужно потому, что в таб-
лице f3 есть столбец f3.departure_airport (аэропорт отправления) и столбец
f3.arrival_airport (аэропорт прибытия), для каждого из них нужно выбрать на-
именование аэропорта и наименование города из таблицы airports. О том, как
нужно рассуждать при двукратном использовании одной и той же таблицы в соеди-
нении, мы уже говорили ранее в разделе 5.4 «Представления».
Достарыңызбен бөлісу: