PARTITION BY
клаузата задава диапазона от записи, които ще се използват за всяка "GROUP" в рамките на OVER
клауза.
Във вашия примерен SQL, DEPT_COUNT
ще върне броя на служителите в този отдел за всеки запис на служители. (Сякаш де-номализирате emp
маса; все още връщате всеки запис в emp
таблица.)
emp_no dept_no DEPT_COUNT
1 10 3
2 10 3
3 10 3 <- three because there are three "dept_no = 10" records
4 20 2
5 20 2 <- two because there are two "dept_no = 20" records
Ако имаше друга колона (напр. state
) тогава можете да преброите колко департамента в този щат.
Това е като получаване на резултатите от GROUP BY
(SUM
, AVG
и т.н.) без агрегирането на набора от резултати (т.е. премахване на съвпадащи записи).
Полезно е, когато използвате LAST OVER
или MIN OVER
функции, за да получите например най-ниската и най-високата заплата в отдела и след това да я използвате при изчисление спрямо това записване на заплата без подизбиране, което е много по-бързо.
Прочетете свързаната статия на AskTom за повече подробности.