Учебно-практическое пособие москва 2017 ббк



Pdf көрінісі
бет141/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   137   138   139   140   141   142   143   144   ...   243
Байланысты:
Язык SQL. Базовый курс

общее табличное выра-
жение (Common Table Expression — CTE)
.
WITH ts AS
( SELECT f.flight_id,
f.flight_no,
f.scheduled_departure_local,
f.departure_city,
143


f.arrival_city,
f.aircraft_code,
count( tf.ticket_no ) AS fact_passengers,
( SELECT count( s.seat_no )
FROM seats s
WHERE s.aircraft_code = f.aircraft_code
) AS total_seats
FROM flights_v f
JOIN ticket_flights tf ON f.flight_id = tf.flight_id
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 так, как если бы она существовала постоянно. Но
важно учитывать, что временная таблица, создаваемая в общем табличном выраже-
нии, существует только во время выполнения запроса.
В этой главе мы уже решали задачу распределения сумм бронирований по диапазо-
нам с шагом в сто тысяч рублей. Тогда мы использовали предложение VALUES для
формирования виртуальной таблицы. Можно решить эту задачу более рациональ-
ным способом с использованием конструкции WITH ... AS (...).
Сначала покажем, как можно сформировать диапазоны сумм бронирований с помо-
щью


Достарыңызбен бөлісу:
1   ...   137   138   139   140   141   142   143   144   ...   243




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

    Басты бет