Топ питань
Часова шкала
Чат
Перспективи
Віконна функція (SQL)
З Вікіпедії, вільної енциклопедії
Remove ads
В SQL віконна функція — функція, яка виконує обчислення над набором рядків, який визначається для кожного рядка вхідної таблиці окремо і називається вікном, причому кількість рядків цього набору у підсумковій таблиці не змінюється. Віконні функції вперше з'явилися у стандарті SQL:2003.
Синтаксис
Синтаксис віконної функції виглядає так[1]:
<віконна_функція>() OVER (
[PARTITION BY вираз_1 [, вираз_2, ...]]
[ORDER BY вираз_порядкування [ASC|DESC] [, ...]]
[рамкова_умова]
)
Тут
OVER(…)— обов'язкова частина, яка задає правила визначення вікна (набору рядків) для кожного рядка вхідної таблиці;[2]PARTITION BYзадає розбиття рядків на підгрупи (якGROUP BY, але без агрегації в один рядок);[3]ORDER BYзадає порядок всередині вікна;[4]рамкова_умова— умова, яку має задовольняти рядок вхідної таблиці, щоб входити до вікна певного рядка.[5]
Remove ads
Типи віконних функцій
Узагальнити
Перспектива
Агрегатні функції як віконні
Кожну агрегатну функцію можна перетворити на віконну, бо для них вікна нічим не відрізняються від груп, утворених GROUP BY.[6]
Функції впорядкування
Функція впорядкування (англ. ranking function[7] або англ. ordinal function) повертає певний порядковий номер рядка у вікні. Щоб отримати змістовний результат обчислення такої функції, потрібно задати певний порядок у вікні через ORDER BY.[8]
Перелік деякий функцій впорядкування:
ROW_NUMBER()повертає унікальний порядковий номер рядка у вікні, починаючи з 1, відповідно до сортування, заданого вORDER BY.[8]RANK()повертає номер рядка за заданим порядком у вікні, при цьому рядки з однаковими значеннями по колонках, заданих вORDER BY, отримують однаковий ранг, а наступний збільшується на кількість цих значень.[8][9]DENSE_RANK()повертає номер рядка за заданим порядком у вікні, при цьому рядки з однаковими значеннями по колонках, заданих вORDER BY, отримують однаковий ранг, а наступний збільшується на одиницю.[10][11]PERCENT_RANK()повертає відносний ранг рядка у вікні у вигляді числа від 0 до 1. Якщо вікно містить n рядків при n > 1, а певний рядок має ранг r, то його відносний ранг дорівнює Якщо вікно містить один рядок, то відносний ранг його єдиного рядка дорівнюєNULL.[12][13]CUME_DIST()(cumulative distribution — кумулятивний розподіл) показує, яка частка рядків у вікні менша або дорівнює певному рядку, відповідно до сортування, заданого вORDER BY. Якщо вікно містить n рядків, а певний рядок за заданим порядком у вікні йде перед або дорівнює p рядкам, то для нього значення цієї віконної функції дорівнює [12][13]NTILE(n)розбиває вікно на n груп, які містять приблизно однакову кількість рядків, присвоюючи кожній групі унікальний номер від 1 до n, і для кожного рядка повертає номер його групи.[14]
Remove ads
Примітки
Література
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads