RANK() und DENSE_RANK() von Oracle: Finden des N-thöchsten Gehalts
Dieser Artikel untersucht die Unterschiede zwischen den Funktionen RANK()
und DENSE_RANK()
von Oracle und demonstriert deren Verwendung bei der Identifizierung des n-thöchsten Gehalts und der Behandlung potenzieller Nullwerte.
Verstehen RANK()
und DENSE_RANK()
Beide Funktionen weisen Ränge innerhalb geordneter Datensätze (Partitionen) zu. Der Hauptunterschied liegt im Umgang mit Bindungen:
RANK()
: Weist gebundenen Werten den gleichen Rang zu und hinterlässt Lücken in der Rangfolge. Wenn sich drei Mitarbeiter den zweiten Rang teilen, ist der nächste Rang der 5.
DENSE_RANK()
: Weist auch gebundenen Werten den gleichen Rang zu, jedoch ohne Lücken. Wenn sich drei Mitarbeiter den zweiten Rang teilen, ist der nächste Rang der 3.
Das N-thöchste Gehalt extrahieren
Die folgende Abfrage verwendet RANK()
, um das n-thöchste Gehalt zu finden:
<code class="language-sql">SELECT * FROM ( SELECT emp.*, RANK() OVER (ORDER BY sal DESC) as salary_rank FROM emptbl emp ) ranked_salaries WHERE salary_rank = n;</code>
Ersetzen Sie n
durch den gewünschten Rang (z. B. 3 für das dritthöchste Gehalt). Beachten Sie die ORDER BY sal DESC
-Klausel, die für die Rangfolge in absteigender Reihenfolge entscheidend ist.
Überlegungen zum Nullwert
Die Behandlung von NULL
-Werten hängt von der ORDER BY
-Klausel ab:
ORDER BY sal NULLS FIRST
: NULL
Gehälter stehen an erster Stelle.
ORDER BY sal NULLS LAST
: NULL
Gehälter stehen an letzter Stelle.
Beispiel: Betrachten Sie eine Tabelle mit NULL
Gehältern. Bei Verwendung von NULLS LAST
würde eine Abfrage nach den drei höchsten Gehältern Mitarbeiter mit NULL
-Gehältern von den drei höchsten Gehältern ausschließen. Umgekehrt würde NULLS FIRST
sie einbeziehen und sie möglicherweise an die Spitze der Rangliste bringen.
Eine umfassende Anleitung und weitere Beispiele finden Sie in dieser Ressource: Detaillierte Erklärung und Beispiele
Das obige ist der detaillierte Inhalt vonRANK() vs. DENSE_RANK() in Oracle: Wie finde ich das N-te Gehalt und gehe mit Nullwerten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!