in -Tepth -Diskussion über Oracle's Rank () und dense_rank () Funktionen
Im Bereich der Datenanalyse und Sortierung bietet Oracle zwei sehr unterschiedliche Funktionen: Rank () und dense_rank (), die jeweils spezifische Verwendungszwecke haben. In diesem Artikel werden die subtilen Unterschiede zwischen diesen beiden Funktionen und deren Anwendungsszenarien untersucht.
Die Funktion rank () wird als Zeile der Zeile gemäß der angegebenen Reihenfolge zugewiesen, während die Funktion dense_rank () kontinuierliche Ebenen zuteilt. Betrachten Sie beispielsweise die folgende Szene:
In diesem Beispiel zugewiesen das Gehalt von RRR und NNN, obwohl die Funktion rank () die gleiche Ebene (2) für sie zuweist, und die Funktion dense_rank () verteilt kontinuierliche Ebenen, um sicherzustellen, dass es kein Niveau von gibt Überspringen
<code class="language-sql">SELECT empname, sal, RANK() OVER (ORDER BY sal) AS r, DENSE_RANK() OVER (ORDER BY sal) AS dr FROM emptbl;</code>
Empname | Sal | r | dr |
---|---|---|---|
rrr | 10000 | 2 | 2 |
nnn | 20000 | 3 | 3 |
mmm | 5000 | 1 | 1 |
kkk | 30000 | 4 | 4 |
fff | 40000 | 5 | 5 |
ddd | 40000 | 5 | 5 |
bbb | 50000 | 7 | 6 |
ccc | 50000 | 7 | 6 |
Um das N -Gehalt in der Tabelle zu finden (z. B. das dritte hohe Gehalt), können Sie die folgenden Anfragen verwenden:
Die leere WertverarbeitungDas Verhalten von
<code class="language-sql">SELECT sal FROM emptbl ORDER BY sal DESC LIMIT n-1, 1;</code>
In diesem Fall wird angenommen, dass der leere Wert das Mindestpegel (Nulls zuerst) aufweist, was zu unterschiedlichen Niveaus im Vergleich zum höchsten Niveau führt (Nulls zuletzt).
Schlussfolgerung
<code class="language-sql">SELECT empname, sal, RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) AS r, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) AS dr1 FROM emptbl;</code>
Empname | Sal | r | dr1 |
---|---|---|---|
fff | 40000 | 1 | 1 |
ddd | 40000 | 1 | 1 |
rrr | 10000 | 3 | 2 |
xxx | NULL | 2 | 3 |
Oracle () und Dense_Rank () bieten zwei verschiedene Datensortierungsmethoden. Verstehen Sie ihre Unterschiede und ihre angemessene Verwendung und können Datenanalyse- und Betriebsaufgaben effektiv ausführen.
Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen den Oracle-Funktionen RANK() und DENSE_RANK() und wie gehen sie mit Nullwerten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!