Heim  >  Artikel  >  Datenbank  >  Eine kurze Diskussion von row_number(), rank() und dense_rank() in Oracle

Eine kurze Diskussion von row_number(), rank() und dense_rank() in Oracle

青灯夜游
青灯夜游nach vorne
2020-05-13 15:03:082434Durchsuche

Im folgenden Artikel erfahren Sie mehr über row_number(), rank() und dense_rank() in Oracle. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Eine kurze Diskussion von row_number(), rank() und dense_rank() in Oracle

Oracle: row_number(), rank(), dense_rank()

Syntax: ROW_NUMBER( ) OVER();

row_number ist sehr vielseitig. Es wird am besten zum Sortieren verwendet. Es generiert eine fortlaufende Nummer für jede abgefragte Zeile und sortiert sie der Reihe nach Hinweis: Wenn Sie die Funktion row_number verwenden, müssen Sie die over-Klausel verwenden, um eine zu sortierende Spalte auszuwählen, um eine Sequenznummer zu generieren. Die Funktion

rank wird verwendet, um die Rangfolge jeder Zeile innerhalb der Partition des Ergebnissatzes zurückzugeben. Die Rangfolge einer Zeile ist die Anzahl der vorherigen Rangfolgen der relevanten Zeile plus eins. Einfach ausgedrückt ordnet die Rangfunktion die abgefragten Datensätze ein. Anders als die Funktion row_number berücksichtigt die Rangfunktion die Situation, dass die Sortierfeldwerte in der Over-Klausel gleich sind, wenn die Rangfunktion zum Generieren verwendet wird eine Seriennummer, das Sortierfeld in der Over-Klausel. Seriennummern mit unterschiedlichen Feldwerten werden im Folgenden mit derselben Rangfolgenummer übersprungen, d. h. mit der Rangfolgenummer davor Die entsprechende Zeile plus eins kann als Generierung einer Sequenznummer basierend auf der aktuellen Anzahl von Datensätzen verstanden werden. Die Funktionen der Funktion

dense_rank ähneln der Funktion „dense_rank“. Die Funktion „dense_rank“ ist bei der Generierung von Seriennummern kontinuierlich, während die von der Funktion „rank“ generierten Seriennummern diskontinuierlich sein können. Wenn in der Funktion „dense_rank“ derselbe Rang erscheint, wird die gleiche Rangnummer nicht übersprungen und der Rangwert folgt dem vorherigen Rangwert. Innerhalb jeder Gruppe handelt es sich bei rank() um eine Sprungsortierung. Bei zwei ersten Stellen folgt die dritte Stelle.

Über Partition by: Das Schlüsselwort „Partition by“ ist Teil der Analysefunktion in Oracle und wird zum Partitionieren der Ergebnismenge verwendet. Der Unterschied zur Aggregatfunktion „Gruppieren nach“ besteht darin, dass sie nur die Originaldaten in eine Rangfolge bringt und mehrere Datensätze in einer Gruppe zurückgeben kann (die Anzahl der Datensätze bleibt unverändert), während „Gruppieren nach“ Statistiken zu den Originaldaten aggregiert und im Allgemeinen nur eine Antwort hat Ergebnisse statistischer Werte (einer pro Gruppe zurückgegeben).

TIPPS:

Bei Verwendung von rank over() ist der Nullwert der größte. Wenn das Sortierfeld null ist, kann dies dazu führen, dass das Nullfeld eingestuft wird Erstens, was sich auf die Sortierergebnisse auswirkt.

Es kann so sein: Rang über (Aufteilung nach Kurs, Reihenfolge nach Punktzahl, Abstieg, Nullen zuletzt)

Zusammenfassung:

Sie müssen aufpassen bei Verwendung der Ranking-Funktion Die folgenden drei Punkte:

1. Die Ranking-Funktion muss eine OVER-Klausel haben.

2. Die Ranking-Funktion muss eine OVER-Klausel haben, die ORDER BY enthält.

3. Die Sortierung innerhalb der Gruppe beginnt bei 1.

Empfohlenes Tutorial: „Oracle Tutorial

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion von row_number(), rank() und dense_rank() in Oracle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Oracle-Backup-DatenbankNächster Artikel:Oracle-Backup-Datenbank