De PARTITION BY
clausule stelt het bereik van records in dat zal worden gebruikt voor elke "GROUP" binnen de OVER
clausule.
In uw voorbeeld-SQL, DEPT_COUNT
retourneert het aantal werknemers binnen die afdeling voor elk werknemersrecord. (Het is alsof je de emp
de-nomaliseert tafel; je retourneert nog steeds elk record in de emp
tafel.)
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
Als er een andere kolom was (bijv. state
) dan zou je kunnen tellen hoeveel afdelingen in die staat.
Het is alsof je de resultaten krijgt van een GROUP BY
(SUM
, AVG
, etc.) zonder de resultatenset te aggregeren (d.w.z. het verwijderen van overeenkomende records).
Het is handig wanneer u de LAST OVER
. gebruikt of MIN OVER
functies om bijvoorbeeld het laagste en hoogste salaris van de afdeling te krijgen en dat vervolgens te gebruiken in een berekening tegen deze records salaris zonder een subselectie, die veel sneller is.
Lees het gelinkte AskTom-artikel voor meer informatie.