WHERE max_sum < ( SELECT max( total_amount ) FROM bookings )
145
Теперь давайте скомбинируем рекурсивное общее табличное выражение с выборкой
из таблицы 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;
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 строк)
Обратите внимание, что для диапазона от 1100 до 1200 тысяч рублей значение числа
бронирований равно нулю. Для того чтобы была выведена строка с нулевым значе-
нием столбца count, мы использовали внешнее соединение.
В заключение рассмотрим команду для создания материализованного представле-
ния «Маршруты» (routes), которое было описано в главе 5. Но тогда мы не стали рас-
сматривать эту команду, т. к. еще не ознакомились с подзапросами, которые в ней
используются.
146
Описание атрибута
Достарыңызбен бөлісу: |