sql >> Database >  >> RDS >> Oracle

Oracle-partitie op trefwoord

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.



  1. Wat zijn de bekende manieren om een ​​boomstructuur op te slaan in een relationele DB?

  2. sqlite rij-ID's komen niet overeen met lijstweergave - ANDROID

  3. Aanroepnotatie voor PL/SQL-subroutines in Oracle Database

  4. MySQL EXP() Functie – Retourneer e Verhoogd tot de Kracht van x