sql >> Database teknologi >  >> RDS >> Oracle

Oracle-partition efter nøgleord

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.



  1. Sådan opretter du en unik begrænsning på kolonne for allerede eksisterende tabel - SQL Server / TSQL vejledning del 97

  2. LEAD og LAG analytiske funktioner

  3. Hvordan får man information om en brugerdefineret type?

  4. Ret "FEJL 3942 (HY000):Hver række i en VALUES-klausul skal have mindst én kolonne", når du bruger VALUES-sætningen i MySQL