PARTITION BY
klausul indstiller rækken af poster, der vil blive brugt for hver "GROUP" i OVER
klausul.
I dit eksempel SQL, DEPT_COUNT
returnerer antallet af medarbejdere i den pågældende afdeling for hver medarbejderpost. (Det er som om du de-nomaliserer emp
bord; du returnerer stadig hver post i emp
tabel.)
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
Hvis der var en anden kolonne (f.eks. state
) så kunne du tælle hvor mange afdelinger i den stat.
Det er som at få resultaterne af en GROUP BY
(SUM
, AVG
osv.) uden at aggregere resultatsættet (dvs. fjerne matchende poster).
Det er nyttigt, når du bruger LAST OVER
eller MIN OVER
funktioner til at få f.eks. den laveste og højeste løn i afdelingen og så bruge det i en udregning mod denne poster løn uden et undervalg, som er meget hurtigere.
Læs den linkede AskTom-artikel for yderligere detaljer.