PARTITION BY
satsen anger intervallet för poster som kommer att användas för varje "GROUP" inom OVER
klausul.
I ditt exempel SQL, DEPT_COUNT
kommer att returnera antalet anställda inom den avdelningen för varje anställd post. (Det är som om du avnomaliserar emp
tabell; du returnerar fortfarande varje post i emp
tabell.)
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
Om det fanns en annan kolumn (t.ex. state
) då kan du räkna hur många avdelningar i den staten.
Det är som att få resultaten av en GROUP BY
(SUM
, AVG
, etc.) utan att aggregera resultatuppsättningen (dvs. ta bort matchande poster).
Det är användbart när du använder LAST OVER
eller MIN OVER
funktioner för att få till exempel lägsta och högsta lönen på avdelningen och sedan använda den i en uträkning mot denna rekord lön utan ett underval, vilket är mycket snabbare.
Läs den länkade AskTom-artikeln för mer information.