Учебное пособие Санкт-Петербург «бхв-петербург»


WHERE f.status = 'Arrived'



Pdf көрінісі
бет146/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   142   143   144   145   146   147   148   149   ...   256
sql osnovi yazika

WHERE f.status = 'Arrived'
GROUP BY 1, 2, 3, 4, 5, 6
)
SELECT ts.flight_id,
ts.flight_no,
ts.scheduled_departure_local,
ts.departure_city,
ts.arrival_city,
a.model,
ts.fact_passengers,
ts.total_seats,
round( ts.fact_passengers::numeric /
ts.total_seats::numeric, 2 ) AS fraction
FROM ts
JOIN aircrafts AS a ON ts.aircraft_code = a.aircraft_code
ORDER BY ts.scheduled_departure_local;
Конструкция WITH ts AS (...) и представляет собой общее табличное выражение
(CTE). Такие конструкции удобны тем, что позволяют упростить основной запрос,
сделать его менее громоздким. В общем табличном выражении может присутство-
вать больше одного подзапроса. Каждый подзапрос формирует временную таблицу
с указанным именем. Если имена столбцов этой таблицы не заданы явным образом
в виде списка, тогда они определяются на основе списка столбцов в предложении
SELECT. В нашем примере это будет именно так. Теперь мы можем в главном запро-
се обращаться к временной таблице ts так, как если бы она существовала постоянно.
186


6.4. Подзапросы
Но важно учитывать, что временная таблица, создаваемая в общем табличном выра-
жении, существует только во время выполнения запроса.
В этой главе мы уже решали задачу распределения сумм бронирований по диапазо-
нам с шагом в 100 тысяч рублей. Тогда мы использовали предложение VALUES для
формирования виртуальной таблицы. Можно решить эту задачу более рациональ-
ным способом с использованием конструкции WITH ... AS (...).
Сначала покажем, как можно сформировать диапазоны сумм бронирований с помо-
щью рекурсивного общего табличного выражения:
WITH RECURSIVE ranges ( min_sum, max_sum ) AS


Достарыңызбен бөлісу:
1   ...   142   143   144   145   146   147   148   149   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет