logo

SQL Server Row_Number-Funktion mit PARTITION BY

Die Zeilennummernfunktion ist eine der Fensterfunktionen, die zum Zuweisen der Zeilennummer zu den Zeilen in jeder der Partitionen in der Reihenfolge verwendet wird, in der sie in der Partition mithilfe von sortiert wurden TEILUNG Klausel, PARTITION nur die BEFEHL Die Klausel kann innerhalb der OVER-Klausel verwendet werden. In diesem Fall wird die gesamte Tabelle als eine Partition betrachtet. Die ORDER BY-Klausel ist jedoch für die Verwendung zwingend erforderlich ZEILENNUMMER() Funktion, da sie die Zeilen in den Partitionen in dieser logischen Reihenfolge anordnet und später die Funktion ROW_NUMBER() die Zeilennummer zuweisen kann. In jeder Partition beginnt die Zeilennummer bei 1.

Syntax:



ZEILENNUMMER ( )

OVER ( [ PARTITION BY col_1,col_2… ] ORDER BY col_3,col_4.. ASC oder DESC) AS Spaltenname

Komponenten der Funktion ROW_NUMBER()



  • TEILUNG NACH: Dies ist der Hauptunterabschnitt, der die Zeilen in Fenster unterteilt und für jede Zeile die Werte von Fensterfunktionen angewendet wird, berechnet.
  • SORTIEREN NACH: Dies wird verwendet, um die Zeilen in der Partition zu ordnen, standardmäßig ist es die aufsteigende Reihenfolge. Ohne die ORDER BY-Klausel funktioniert die Funktion ROW_NUMBER() nicht.
  • Rückgabetyp: Der Rückgabetyp der Funktion ROW_NUMBER() ist BIGINT.

Verwendung der Funktion ROW_NUMBER()

Schritt 1: Erstellen Sie die Datenbank Geeksforgeeks mit der folgenden SQL-Abfrage:

Abfrage

CREATE DATABASE Geeksforgeeks>

Nutzen Sie die GFG-Datenbank.



Abfrage

USE techcodeview.com>

Schritt 3: Erstellen Sie eine Tabelle mit den Schülern verschiedener Abschnitte mit ihren Gesamtnoten von 500.

Abfrage

CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT  );>

Schritt 4: Fügen Sie die Zeilen in die Tabelle ein:

Abfrage

INSERT INTO studentsSectionWise VALUES (1, 'Geek1','A',461), (1, 'Geek2','B',401), (1, 'Geek3','C',340), (2, 'Geek4','A',446), (2, 'Geek5','B',361), (2, 'Geek6','C',495), (3, 'Geek7','A',436), (3, 'Geek8','B',367), (3, 'Geek9','C',498), (4, 'Geek10','A',206), (4, 'Geek11','B',365), (4, 'Geek12','C',485), (5, 'Geek13','A',446), (5, 'Geek14','B',368),  (5, 'Geek15','C',295),  (6, 'Geek16','C',495);>

Schritt 5: Überprüfen Sie die Tabelle

SELECT * FROM studentsSectionWise>

Ausgabe:

StudentsSectionWise-Table

StudentsSectionWise-Tabelle

Java wandelt int in einen String um

Verwendung der ORDER_BY-Klausel mit der Funktion ROW_NUMBER()

Wenn Sie einfach die ORDER BY-Klausel mit aufsteigender oder absteigender Reihenfolge verwenden, wird die gesamte Tabelle nur als eine Partition betrachtet.

Lassen Sie uns die rankNumber der Schüler mithilfe der Funktion ROW_NUMBER() mit der ORDER BY-Klausel einschließlich aller Abschnitte überprüfen:

SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>

Erläuterung: In der Abfrage haben wir die ORDER BY-Klausel mit den StudentsMarks verwendet, die in DESC-Reihenfolge geordnet sind.

Ausgabe:

Ausgabe

Ausgabe

Erläuterung: Im Ergebnis können wir sehen, dass die gesamte Tabelle als einzelne Partition betrachtet wird und die rankNumber-Nummer in aufsteigender Reihenfolge und die StudentsMarks in absteigender Reihenfolge angeordnet sind.

Verwenden von PARTITION_BY mit der Funktion ROW_NUMBER()

Wenn Sie einfach die PARTITION BY-Klausel verwenden, wird die Tabelle basierend auf dem Spaltennamen in verschiedene Partitionen aufgeteilt. Anschließend wird die gesamte Tabelle mit der ORDER BY-Klausel mit aufsteigender oder absteigender Reihenfolge als nur eine Partition betrachtet. Und dann funktioniert ROW_NUMBER() jede eindeutige Zahl beginnend bei 1 in jeder Partition.

Lassen Sie uns die Rangfolge abschnittsweise mithilfe der Funktion ROW_NUMBER() mit den Klauseln PARTITION BY und ORDER BY überprüfen.

SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>

Erläuterung: In der von uns verwendeten Abfrage PARTITION BY-Klausel um die Tabelle nach sectionName und der ORDER BY-Klausel mit den StudentsMarks zu partitionieren, die in DESC geordnet sind.

Ausgabe:

Ausgabe

Ausgabe

Erläuterung: Im Ergebnis können wir sehen, dass wir Partitionen haben, die durch den Abschnittsnamen geteilt sind, und dann werden die Schüler in jeder Partition auf der Grundlage der Studentennoten in der DESC-Reihenfolge geordnet. Die Funktion ROW_NUMBER() weist die Zeilennummer beginnend in jeder Partition zu und erhöht sie .

ROW_NUMBER() ohne PARTITION BY verstehen

Die Funktion ROW_NUMBER() von SQL Server ist ein flexibles Tool, mit dem Sie jeder Zeile in einem Ergebnissatz eine eindeutige Zeilennummer zuweisen können. Es ist gleichermaßen effektiv, wenn es ohne die PARTITION BY-Klausel verwendet wird, auch wenn es häufig in Verbindung damit zum Gruppieren und Einordnen innerhalb von Partitionen verwendet wird. Die Möglichkeiten und Einsatzmöglichkeiten von ROW_NUMBER() ohne die PARTITION BY-Klausel werden in diesem Artikel besprochen.

Syntax:

WÄHLEN

ROW_NUMBER() ÜBER ( SORTIEREN NACH YourOrderByColumn) ALS RowNum,

OtherColumns

AUS

YourTableName;

Lassen Sie uns die Rangfolge abschnittsweise mit der Funktion ROW_NUMBER() ohne die Klauseln PARTITION BY und ORDER BY überprüfen.

SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>

Ausgabe:

Ausgabe

Ausgabe

Verwenden von ROW_NUMBER() zum Abrufen der Teilmenge der Zeilen

Die Funktion ROW_NUMBER() kann verwendet werden, um mithilfe des CTE die Teilmenge der Zeilen aus der Tabelle abzurufen, was im Fall der Paginierung der Daten nützlich sein kann.

Schauen wir uns die Top-2-Ranglisten jeder Klasse mithilfe des an CTE (Common Table Expression) mit der Funktion ROW_NUMBER():

WITH topTwoRankers AS  (   SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber  FROM studentsSectionWise  )  SELECT *  FROM topTwoRankers  WHERE rankNumber <=2;>

Erläuterung: Hier in der Abfrage haben wir den CTE-Ausdruck verwendet, um die temporäre Tabelle aus der oben verwendeten Abfrage abzurufen, und wir haben die äußere SELCT-Abfrage verwendet, um die Schüler abzurufen, deren rankNumber kleiner oder gleich 2 ist.

Ausgabe:

Ausgabe

Ausgabe

Erläuterung: Im Ergebnis können wir sehen, dass wir die beiden Spitzenreiter aus jedem Abschnitt haben, die die Teilmenge der Tabelle darstellen, die aus der im vorherigen Beispiel gezeigten Abfrage erhalten wurde.

Vorteile vonROW_NUMBER()>Mit PARTITION BY

  1. Ermöglicht erweitertes Partitionsranking.
  2. Ermöglicht eine eindeutige Zeilennummerierung innerhalb bestimmter Gruppen.
  3. Ermöglicht eine größere Flexibilität in Situationen, die umfangreiche Analysen erfordern.

Vorteile vonROW_NUMBER()>Ohne PARTITION BY

  1. Geradlinig und einfach.
  2. macht es einfach, Elemente nach einer bestimmten Spalte zu ordnen.
  3. Bietet möglicherweise eine bessere Leistung, insbesondere bei kleineren Ergebnismengen.

Abschluss

Dies ist sehr nützlich, wenn wir die Reihenfolge auf der Grundlage der Partition festlegen und die erforderlichen Operationen ausführen möchten. Benutzen ORDER BY-Klausel ist bei Verwendung der Funktion ROW_NUMBER() obligatorisch. Mithilfe des CTE können wir auch die Teilmengen der Tabelle aus den geordneten Partitionen ermitteln. Der Hauptanwendungsfall von ROW_NUMBER() ist die Rangfolge der Zeilen auf der Grundlage verschiedener Partitionen, was für Datenanalysezwecke sehr nützlich ist.