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



Pdf көрінісі
бет129/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   125   126   127   128   129   130   131   132   ...   243
Байланысты:
Язык SQL. Базовый курс

SELECT b.book_ref,
b.book_date,
extract( 'month' from b.book_date ) AS month,
extract( 'day'
from b.book_date ) AS day,
count( * ) OVER (
PARTITION BY date_trunc( 'month', b.book_date )
ORDER BY b.book_date
) AS count
FROM ticket_flights tf
JOIN tickets t ON tf.ticket_no = t.ticket_no
JOIN bookings b ON t.book_ref = b.book_ref
WHERE tf.flight_id = 1
ORDER BY b.book_date;
Рассмотрим конструкцию, предназначенную для вызова оконной функции:
count( * ) OVER (
PARTITION BY date_trunc( 'month', b.book_date )
ORDER BY b.book_date
) AS count
В этой конструкции обязательным является ключевое слово OVER. Функция count —
это обычная агрегатная функция, но если вслед за ней идет это ключевое слово, то
она становится оконной функцией. Предложение PARTITION BY задает правило раз-
биения строк выборки на разделы. Предложение ORDER BY предписывает порядок
сортировки строк в разделах.
Обобщая приведенные объяснения, можно сказать, что раздел включает в себя все
строки выборки, имеющие в некотором смысле одинаковые свойства, например,
одинаковые значения определенных выражений, задаваемых с помощью предложе-
ния PARTITION BY. Это могут быть выражения, построенные на основе одного или
нескольких столбцов таблицы (или таблиц, участвующих в соединении). Оконный
кадр состоит из подмножества строк данного раздела и привязан к текущей стро-
ке. Для определения границ кадра важным является наличие предложения ORDER
BY при формировании раздела. В рассмотренном примере границы оконного кад-
ра определялись по умолчанию. Однако для указания этих границ предусмотрены
различные способы. Подробно о них сказано в разделе документации 4.2.8 «Вызовы
оконных функций».
Не только функция count, но и другие агрегатные функции (например, sum, avg) то-
же могут применяться в качестве оконных функций. Полный перечень собственно
оконных функций приведен в документации в разделе 9.21 «Оконные функции».
Оконные функции, в отличие от обычных агрегатных функций, не требуют группи-
ровки строк, а работают на уровне отдельных (несгруппированных) строк. Однако
132


если в запросе присутствуют предложения GROUP BY и HAVING, тогда оконные функ-
ции вызываются уже
после
них. В таком случае оконные функции будут работать со
строками, являющимися результатом группировки.
Рассмотрим еще один пример. Покажем, как с помощью оконной функции rank мож-
но проранжировать аэропорты в пределах каждого часового пояса на основе их гео-
графической широты. Причем будем присваивать более высокий ранг тому аэропор-
ту, который находится севернее.


Достарыңызбен бөлісу:
1   ...   125   126   127   128   129   130   131   132   ...   243




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

    Басты бет