PARTITION BY
klauzule nastavuje rozsah záznamů, které budou použity pro každou "GROUP" v rámci OVER
doložka.
Ve vašem příkladu SQL DEPT_COUNT
vrátí počet zaměstnanců v daném oddělení pro každý záznam zaměstnance. (Je to, jako byste denomalizovali emp
stůl; stále vracíte každý záznam v emp
tabulka.)
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
Pokud tam byl další sloupec (např. state
), pak byste mohli spočítat, kolik oddělení v tomto státě.
Je to jako získat výsledky GROUP BY
(SUM
, AVG
, atd.) bez agregace sady výsledků (tj. odstranění odpovídajících záznamů).
Je to užitečné, když používáte LAST OVER
nebo MIN OVER
funkcí získat například nejnižší a nejvyšší plat v oddělení a ten pak použít při výpočtu proti této evidenci plat bez dílčí výběr, který je mnohem rychlejší.
Další podrobnosti najdete v odkazovaném článku AskTom.