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



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

вложенные подзапросы
. Это означает,
что один подзапрос находится внутри другого. Давайте в качестве примера рассмот-
рим такую ситуацию: руководство авиакомпании хочет выяснить степень заполне-
ния самолетов на всех рейсах, ведь отправлять полупустые самолеты не очень выгод-
но. Таким образом, запрос должен не только выдавать число билетов, проданных на
данный рейс, и общее число мест в самолете, но должен также вычислять отношение
этих двух показателей.
Вот какой запрос получился:
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 (
SELECT f.flight_id,
f.flight_no,
f.scheduled_departure_local,
f.departure_city,
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
) AS ts
JOIN aircrafts AS a ON ts.aircraft_code = a.aircraft_code
ORDER BY ts.scheduled_departure_local;
Самый внутренний подзапрос — total_seats — выдает общее число мест в самолете.
Этот подзапрос — коррелированный, т. к. он выполняется для каждой строки, обра-
батываемой во внешнем подзапросе, т. е. для каждой модели самолета. Для подсче-
та числа проданных билетов мы использовали соединение представления «Рейсы»
(flights_v) с таблицей «Перелеты» (ticket_flights) с последующей группировкой строк
и вызовом функции count. Конечно, можно было бы вместо такого решения исполь-
зовать еще один коррелированный подзапрос:


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




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

    Басты бет