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



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

WHERE max_sum < ( SELECT max( total_amount ) FROM bookings )
Теперь давайте скомбинируем рекурсивное общее табличное выражение с выборкой
из таблицы bookings:
WITH RECURSIVE ranges ( min_sum, max_sum ) AS
( VALUES( 0, 100000 )
UNION ALL
SELECT min_sum + 100000, max_sum + 100000
FROM ranges
WHERE max_sum <
( SELECT max( total_amount ) FROM bookings )
)
SELECT r.min_sum, r.max_sum, count( b.* )
FROM bookings b
RIGHT OUTER JOIN ranges r
ON b.total_amount >= r.min_sum
AND b.total_amount < r.max_sum
GROUP BY r.min_sum, r.max_sum
ORDER BY r.min_sum;
188


6.4. Подзапросы
min_sum | max_sum | count
---------+---------+--------
0 | 100000 | 198314
100000 | 200000 | 46943
200000 | 300000 | 11916
300000 | 400000 |
3260
400000 | 500000 |
1357
500000 | 600000 |
681
600000 | 700000 |
222
700000 | 800000 |
55
800000 | 900000 |
24
900000 | 1000000 |
11
1000000 | 1100000 |
4
1100000 | 1200000 |
0
1200000 | 1300000 |
1
(13 строк)
Обратите внимание, что для диапазона от 1 100 до 1 200 тысяч рублей значение числа
бронирований равно нулю. Для того чтобы была выведена строка с нулевым значе-
нием столбца count, мы использовали внешнее соединение.
В заключение рассмотрим команду для создания материализованного представле-
ния «Маршруты» (routes), которое было описано в главе 5. Но тогда мы не стали
рассматривать эту команду, т. к. еще не ознакомились с подзапросами, которые в ней
используются.
Описание атрибута
Имя атрибута
Тип PostgreSQL
Номер рейса
flight_no
char(6)
Код аэропорта отправления
departure_airport
char(3)
Название аэропорта отправления
departure_airport_name
text
Город отправления
departure_city
text
Код аэропорта прибытия
arrival_airport
char(3)
Название аэропорта прибытия
arrival_airport_name
text
Город прибытия
arrival_city
text
Код самолета, IATA
aircraft_code
char(3)
Продолжительность полета
duration
interval
Дни недели, когда выполняются рейсы
days_of_week
integer[ ]
189


Глава 6. Запросы
Эта команда выглядит так:


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




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

    Басты бет