Die PARTITION BY
-Klausel legt den Bereich der Datensätze fest, die für jede "GROUP" innerhalb des OVER
verwendet werden Klausel.
In Ihrem SQL-Beispiel DEPT_COUNT
gibt die Anzahl der Mitarbeiter in dieser Abteilung für jeden Mitarbeiterdatensatz zurück. (Es ist, als würden Sie den emp
de-nomisieren Tisch; Sie geben immer noch jeden Datensatz im emp
zurück Tabelle.)
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
Gäbe es eine andere Spalte (z.B. state
), dann könnten Sie zählen, wie viele Abteilungen in diesem Staat sind.
Es ist, als ob man die Ergebnisse eines GROUP BY
erhält (SUM
, AVG
, etc.), ohne die Ergebnismenge zu aggregieren (d. h. übereinstimmende Datensätze zu entfernen).
Es ist nützlich, wenn Sie den LAST OVER
verwenden oder MIN OVER
Funktionen, um zum Beispiel das niedrigste und höchste Gehalt in der Abteilung zu erhalten und diese dann in einer Berechnung gegen dieses Datensatzgehalt ohne zu verwenden eine Unterauswahl, die viel schneller ist.
Lesen Sie den verlinkten AskTom-Artikel für weitere Details.