logo

RANK-Funktion in SQL Server

Die RANK-Funktion in SQL Server ist eine Art Ranking-Funktion. Diese Funktion wird Weisen Sie jeder Zeile innerhalb der Partition einer Ausgabe die Nummer zu . Es weist jeder Zeile den Rang als Eins plus den Rang der vorherigen Zeile zu. Wenn die RANK-Funktion zwei Werte findet, die innerhalb derselben Partition identisch sind, weist sie ihnen dieselbe Rangnummer zu. Darüber hinaus ist die nächste Nummer in der Rangliste die vorherige Nummer plus doppelte Nummern. Daher weist diese Funktion die Rangfolge der Zeilen nicht immer in aufeinanderfolgender Reihenfolge zu.

Die RANK-Funktion ist ebenfalls ein Unterbestandteil der Fensterfunktionen. Bei der Verwendung dieser Funktion sollten die folgenden Punkte beachtet werden :

  • Es funktioniert immer mit der OVER()-Klausel.
  • Es weist jeder Zeile basierend auf der ORDER BY-Klausel einen Rang zu.
  • Es weist jeder Zeile in aufeinanderfolgender Reihenfolge einen Rang zu.
  • Den Zeilen wird immer ein Rang zugewiesen, beginnend mit einem für jede neue Partition.

HINWEIS: Der Rang weist temporäre Werte für Zeilen innerhalb der Partition zu, wenn die Abfrage ausgeführt wird.

SQL Server bietet die folgenden Rangfunktionen :

  • RANG()
  • ZEILENNUMMER()
  • DENSE_RANK()
  • NTILE()

Lassen Sie uns jede Rangfunktion im Detail lernen. Zunächst erstellen wir eine Tabelle zur Demonstration aller dieser Funktionen. Die folgenden Anweisungen erstellen eine Tabelle mit dem Namen rank_demo mit drei Spalten:

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

Als nächstes fügen wir einige Zeilen wie folgt in diese Tabelle ein:

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

Wir können die Tabelle mit der SELECT-Anweisung überprüfen. Es zeigt die folgende Ausgabe an:

RANK-Funktion in SQL Server

RANK()-Funktion

Diese Funktion wird verwendet, um den Rang für jede Zeile im Ergebnissatz zu bestimmen. Die folgende Syntax veranschaulicht die Verwendung einer RANK-Funktion in SQL Server:

 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

In dieser Syntax gilt

  • Der OVER-Klausel legt die Partitionierung und Reihenfolge eines Ergebnisses fest, bevor die zugehörige Fensterfunktion angewendet wird.
  • Der PARTITION BY-Klausel teilt die von der FROM-Klausel erzeugte Ausgabe in die Partition auf. Anschließend wird die Funktion auf jede Partition angewendet und neu initialisiert, wenn die Divisionsgrenze Partitionen überschreitet. Wenn wir diese Klausel nicht definiert haben, behandelt die Funktion alle Zeilen als eine einzelne Partition.
  • Der SORTIEREN NACH ist eine erforderliche Klausel, die die Reihenfolge der Zeilen in absteigender oder aufsteigender Weise basierend auf einem oder mehreren Spaltennamen bestimmt, bevor die Funktion angewendet wird.

Beispiel

Sehen wir uns an, wie die RANK()-Funktion in SQL Server funktioniert. Die folgende Anweisung verwendet die Rangfunktion, um jeder Zeile eine Nummerierung zuzuweisen:

 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

Da wir das nicht genutzt haben PARTITION BY-Klausel , behandelte die Funktion das gesamte Ergebnis als eine einzelne Partition. Wenn Sie die Anweisung ausführen, wird die folgende Ausgabe angezeigt:

RANK-Funktion in SQL Server

In dieser Ausgabe können wir sehen, dass einige Zeilen denselben Rang erhalten, weil sie denselben Wert in haben Stadtsäule . Und die nächste Zahl in der Rangliste ist ihr vorheriger Rang plus eine Anzahl doppelter Zahlen.

jlist

Die folgende Aussage ist ein anderes Beispiel Dabei werden wir eine Partition-by-Klausel verwenden, die die Zeilen basierend auf teilt Stadt Spalte und weisen Sie jeder Zeile innerhalb einer Partition eine Rangfolge zu. Die Reihenfolge der Ausgabe richtet sich nach der Vorname :

 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

Es wird die folgende Ausgabe angezeigt:

RANK-Funktion in SQL Server

Funktion ROW_NUMBER()

Diese Funktion dient dazu Gibt die eindeutige fortlaufende Nummer für jede Zeile zurück innerhalb seiner Partition. Die Zeilennummerierung beginnt bei eins und erhöht sich um eins, bis die Gesamtanzahl der Zeilen der Partition erreicht ist. Es werden die verschiedenen Ränge für die Zeile mit ähnlichen Werten zurückgegeben, die sie von der Funktion RANK() unterscheiden.

Die folgende Syntax veranschaulicht die Verwendung einer ROW_NUMBER()-Funktion in SQL Server:

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Beispiel

Führen Sie die folgende Abfrage aus, um jeder Zeile eine Sequenznummer zuzuweisen:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Es wird die Rangfolge für die Tabelle gemäß ihrer zugewiesen Stadt . Hier können wir sehen, dass der Zeile mit den gleichen Stadtwerten unterschiedliche Ränge zugewiesen werden.

Java-String-zu-Int-Konvertierung
RANK-Funktion in SQL Server

Wenn wir die Sortierreihenfolge ändern von aufsteigend bis absteigend Mit der ORDER BY-Klausel ändert diese Funktion auch den RANK entsprechend. Siehe die folgende Erklärung:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

Hier ist das Ergebnis:

RANK-Funktion in SQL Server

DENSE_RANK() Funktion

Diese Funktion weist zu ein eindeutiger Rang für jede Zeile innerhalb einer Partition gemäß dem angegebenen Spaltenwert ohne Lücken. Die Rangfolge wird immer in fortlaufender Reihenfolge angegeben. Wenn wir eine bekommen doppelter Wert , weist diese Funktion ihm den gleichen Rang zu, wobei der nächste Rang die nächste fortlaufende Nummer ist. Diese Eigenschaft unterscheidet die Funktion DENSE_RANK() von der Funktion RANK().

Die folgende Syntax veranschaulicht die Verwendung einer DENSE_RANK()-Funktion in SQL Server:

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Beispiel

Die folgende Abfrage verwendet die Funktion DENSE_RANK(), um jeder Zeile eine Rangnummer zuzuweisen:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Es wird die folgende Ausgabe zurückgegeben, in der wir sehen können, dass die doppelten Werte denselben Rang haben und der folgende Rang die nächste fortlaufende Nummer ist.

RANK-Funktion in SQL Server

Dies ist ein weiteres Beispiel für die Funktion DENSE_RANK() unter Verwendung der PARTITION BY-Klausel. Diese Klausel unterteilt die Zeilen basierend auf der Stadtspalte und die Reihenfolge einer Ergebnismenge basiert auf dem Vornamen:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

Wir erhalten die folgende Ausgabe, da keine zwei Namen gleich sind. In diesem Fall ähnelt die Ausgabe der Funktion RANK().

RANK-Funktion in SQL Server

Aktualisieren wir den Namen mit der folgenden Abfrage:

 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

Führen Sie nun dieselbe Abfrage erneut aus. Wir werden sehen, dass diese Tabelle den gleichen Namen hat Kalifornien-Stadt . Daher ist auch der Rang für beide Namen gleich.

RANK-Funktion in SQL Server

NTILE(N)-Funktion

Diese Funktion dient dazu Verteilen Sie Zeilen einer geordneten Partition auf eine vordefinierte Anzahl (N) von ungefähr gleichen Gruppen. Jede Zeilengruppe erhält ihren Rang basierend auf der definierten Bedingung und beginnt mit der Nummerierung ab einer Gruppe. Es weist a zu Bucket-Nummer für jede Zeile in einer Gruppe, die die Gruppe darstellt, zu der sie gehört.

Zeichenfolge Java hinzufügen

Die folgende Syntax veranschaulicht die Verwendung einer NTILE()-Funktion in SQL Server:

 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Beispiel

Die folgende Abfrage verwendet die Funktion NTILE(), um jeder Zeile eine Rangnummer zuzuweisen:

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Die angegebene Tabelle hat acht Schallplatten . deshalb, die NTILE(3) sagt, dass die Ergebnismenge eine haben muss Gruppe von drei Datensätzen . Wenn Sie die Anweisung ausführen, wird die folgende Ausgabe angezeigt:

RANK-Funktion in SQL Server

In diesem Artikel werden alle im SQL Server verwendeten RANK-Funktionen anhand verschiedener Beispiele erläutert. Es zeigt auch die Hauptunterschiede zwischen diesen Funktionen. Diese Funktionen sind für Entwickler sehr nützlich, um ihre Daten gut untersuchen und verwalten zu können.