PARTITION BY
klauzula określa zakres rekordów, które będą używane dla każdej „GRUPY” w OVER
klauzula.
W twoim przykładzie SQL DEPT_COUNT
zwróci liczbę pracowników w tym dziale dla każdego rekordu pracownika. (To tak, jakbyś odnomalizował emp
stół; nadal zwracasz każdy rekord w emp
tabela.)
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
Jeśli była inna kolumna (np. state
) możesz policzyć, ile departamentów w tym stanie.
To tak, jakby uzyskać wyniki GROUP BY
(SUM
, AVG
, itp.) bez agregowania zestawu wyników (tj. usuwania pasujących rekordów).
Jest to przydatne, gdy używasz LAST OVER
lub MIN OVER
funkcje, aby uzyskać na przykład najniższą i najwyższą pensję w dziale, a następnie użyć jej w obliczeniach względem tego rekordu wynagrodzenia bez wybór podrzędny, który jest znacznie szybszy.
Przeczytaj powiązany artykuł AskTom, aby uzyskać więcej informacji.