Wir führen Berechnungen für Daten mit verschiedenen aggregierten Funktionen wie Max, Min und AVG durch. Wir erhalten eine einzelne Ausgabezeile mit diesen Funktionen. SQL Sever bietet SQL-Rangfunktionen, um den Rang für einzelne Felder gemäß den Kategorisierungen anzugeben. Es gibt einen aggregierten Wert für jede teilnehmende Zeile zurück. SQL RANK-Funktionen kennt auch als Fensterfunktionen.
- Hinweis: Windows-Begriff in diesem bezieht sich nicht auf das Microsoft Windows-Betriebssystem., Dies sind SQL-Rangfunktionen.
Wir haben die folgenden Rangfunktionen.
- ROW_NUMBER ()
- RANK ()
- DENSE_RANK ()
- NTILE ()
In den SQL-Rangfunktionen verwenden wir die OVER () – Klausel, um eine Reihe von Zeilen in der Ergebnismenge zu definieren. Wir können auch SQL PARTITION BY Klausel verwenden, um eine Teilmenge von Daten in einer Partition zu definieren. Sie können auch Order by Klausel verwenden, um die Ergebnisse in absteigender oder aufsteigender Reihenfolge zu sortieren.
Bevor wir diese SQL-Rangfunktionen untersuchen, bereiten wir Beispieldaten vor., In diesem Beispiel werden Daten, die wir haben, die Ergebnisse der Prüfung für drei Schüler in Mathematik, Naturwissenschaften und Englisch Themen.
Wir haben die folgenden Beispieldaten in der ExamResult-Tabelle.
Lassen Sie uns jede SQL-Rangfunktionen in kommenden Beispielen verwenden.
ROW_Number() SQL RANK funktion
Wir verwenden ROW_Number () SQL RANK funktion zu erhalten eine einzigartige sequentielle anzahl für jede zeile in die angegebenen daten. Es gibt den Rang eins für die erste Zeile und erhöht dann den Wert für jede Zeile um eins. Wir erhalten verschiedene Ränge für die Zeile mit ähnlichen Werten.,
Führen Sie die folgende Abfrage aus, um einen Rang für Schüler gemäß ihren Noten zu erhalten.,
1
2
3
4
5
|
SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks) RowNumber
FROM ExamResult;
|
By default, it sorts the data in ascending order and starts assigning ranks for each row., Im obigen Screenshot erhalten wir die Zeilennummer 1 für die Markierungen 50.
Wir können absteigende Reihenfolge mit Order By Klausel angeben, und es ändert sich der RANG entsprechend.,ae“>
1
2
3
4
5
|
SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks desc) RowNumber
FROM ExamResult;
|
RANK() SQL RANK Function
We use RANK() SQL Rank function to specify rank for each row in the result set., Wir haben studentische Ergebnisse für drei Fächer. Wir möchten das Ergebnis der Schüler nach ihren Noten in den Fächern einstufen. Zum Beispiel, im folgenden Screenshot, Student Isabella bekam die höchsten Noten in Englisch Fach und niedrigsten Noten in Mathematik Fach. Gemäß den Noten erhält Isabella den ersten Rang in Englisch und den 3. Platz in Mathe.
Führen Sie die folgende Abfrage aus, um das Ergebnis festzulegen.,v id=“c5a1f1b829″>
1
2
3
4
5
6
7
|
SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;
|
Let’s execute the following query of SQL Rank function and look at the result set., In dieser Abfrage haben wir keine SQL PARTITION By-Klausel angegeben, um die Daten in eine kleinere Teilmenge aufzuteilen. Wir verwenden die SQL-Rangfunktion mit der over-Klausel für die Marks-Klausel (in absteigender Reihenfolge), um Ränge für die jeweiligen Zeilen abzurufen.,div id=“7d9d5b54ae“>
1
2
3
4
5
6
|
SELECT Studentname,
Subject,
Marks,
RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;
|
In the output, we can see each student get rank as per their marks irrespective of the specific subject., Beispielsweise sind die höchsten und niedrigsten Markierungen in der vollständigen Ergebnismenge 90 bzw. In der Ergebnismenge erhält die höchste Note RANG 1 und die niedrigste Note RANG 9.
Wenn zwei Schüler die gleichen Noten erhalten (in unserem Beispiel die Zeilennummern 4 und 5), sind auch ihre Ränge gleich.
DENSE_RANK() SQL-Rangfunktion
Wir verwenden die DENSE_RANK () – Funktion, um eine eindeutige Rangnummer innerhalb der Partition gemäß dem angegebenen Spaltenwert anzugeben. Es ähnelt der Rangfunktion mit einem kleinen Unterschied.,
Wenn wir in der SQL-Rangfunktion DENSE_RANK () doppelte Werte haben, weist SQL diesen Zeilen auch unterschiedliche Ränge zu. Idealerweise sollten wir den gleichen Rang für doppelte oder ähnliche Werte erhalten.
Führen wir die folgende Abfrage mit der Funktion DENSE_RANK() aus.,
1
2
3
4
5
6
|
WÄHLEN Sie Studentname,
Betreff
Marken
DENSE_RANK() ÜBER(ORDER BY Markiert DESC) Rank
AUS ExamResult
ORDER BY Rank;
|
In der Ausgabe können Sie sehen, wir haben den gleichen Rang für beide, Lily und Isabella wer hat 70 Mark.,
Verwenden wir die DENSE_RANK Funktion in Kombination mit der SQL PARTITION BY Klausel.,v-id=“2d0aafc924″>
Wir tun nicht haben zwei Studenten mit ähnlichen Flecken; daher setzen ähnlich der RANG-Funktion in diesem Fall.,
Lassen Sie uns die Schülermarke mit der folgenden Abfrage aktualisieren und die Abfrage erneut ausführen.
1
|
Update Examresult-set Markierung=70, wo Studentname=’Isabella‘ und Subject=’Mathematik‘
|
Wir können sehen, dass in der Studenten-Gruppe, Isabella bekam ähnliche Noten in Mathematik und naturwissenschaftlichen Fächern., Der Rang ist in diesem Fall auch für beide Fächer gleich.
wir sehen den Unterschied zwischen RANK() und DENSE_RANK() SQL-Rang-Funktion mit der folgenden Abfrage.,b829″>
1
2
3
4
5
6
7
|
WÄHLEN Sie Studentname,
Betreff
Marken
DENSE_RANK() OVER(PARTITION BY StudentName AUFTRAG DURCH Markierungen ) Rang
AUS ExamResult
ORDER BY Studentname,
Rank;
|
In der Ausgabe können Sie sehen die Lücke in der Rang-Funktion Ausgang innerhalb der Partitionen., Wir haben keine Lücke in der DENSE_RANK Funktion.
Im folgenden Screenshot sehen Sie, dass Isabella in den beiden Fächern ähnliche Zahlen hat. Eine Rangfunktion weist Rang 1 für ähnliche Werte zu, ignoriert jedoch intern Rang zwei und die nächste Zeile erhält Rang drei.
In der Dense_Rank-Funktion behält es den Rang bei und gibt keine Lücke für die Werte an.
NTILE(N) SQL-Rangfunktion
Wir verwenden die NTILE(N) – Funktion, um die Anzahl der Zeilen in der angegebenen (N) Anzahl von Gruppen zu verteilen., Jede Zeilengruppe erhält ihren Rang gemäß der angegebenen Bedingung. Wir müssen den Wert für die gewünschte Anzahl von Gruppen angeben.
In meinem Beispiel haben wir neun Datensätze in der ExamResult-Tabelle. Das NTILE (2) zeigt, dass wir eine Gruppe von zwei Datensätzen im Ergebnis benötigen.,
1
2
3
4
5
|
SELECT *,
NTILE(2) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;
|
In the output, we can see two groups. Group 1 contains five rows, and Group 2 contains four rows.,
Ähnlich teilt NTILE(3) die Anzahl der Zeilen von drei Gruppen mit drei Datensätzen in jeder Gruppe.,
1
2
3
4
5
|
SELECT *,
NTILE(3) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;
|
We can use SQL PARTITION BY clause to have more than one partition., In der folgenden Abfrage wird jede Partition zu Themen in zwei Gruppen unterteilt.,
1
2
3
4
|
SELECT *,
NTILE(2) OVER(PARTITION BY subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY subject, rank;
|
Practical usage of SQL RANK functions
We can use SQL RANK function to fetch specific rows from the data., Angenommen, wir möchten die Daten der Schüler von den Rängen 1 bis 3 erhalten. In der folgenden Abfrage verwenden wir Common Table Expressions (CTE), um Daten mit der Funktion ROW_NUMBER () abzurufen, und filtern später das Ergebnis aus CTE, um unsere Bedingung zu erfüllen.,d>
Wir können den Befehl OFFSET FETCH ausgehend von SQL verwenden Server 2012 zum Abrufen einer bestimmten Anzahl von Datensätzen.,v-id=“0fa57edc44″>
Eine kurze Zusammenfassung der SQL-RANG-Funktionen
ROW_Number |
Es ordnet die Reihenfolge Anzahl, um jeden eindeutigen Datensatz., |
RANG |
Es weist jeder Zeile in einer Partition die Rangnummer zu. Es überspringt die Zahl für ähnliche Werte. |
Dense_RANK |
Es weist jeder Zeile in einer Partition die Rangnummer zu. Es überspringt nicht die Zahl für ähnliche Werte. |
NTILE (N) |
Es teilt die Anzahl der Zeilen gemäß der angegebenen Partition und weist der Partition einen eindeutigen Wert zu., |
Schlussfolgerung
In diesem Artikel haben wir SQL-Rangfunktionen und den Unterschied zwischen diesen Funktionen untersucht. Für SQL-Entwickler ist es hilfreich, mit diesen Funktionen vertraut zu sein, um ihre Daten gut zu erkunden und zu verwalten. Wenn Sie Kommentare oder Fragen haben, können Sie diese gerne in den Kommentaren unten hinterlassen.,
- Author
- Recent Posts
Er ist der Schöpfer einer der größten kostenlosen Online-Sammlungen von Artikeln zu einem einzigen Thema, mit seiner 50-teiligen Serie auf SQL Server Immer auf Verfügbarkeitsgruppen. Aufgrund seines Beitrags zur SQL Server-Community wurde er 2020 und 2021 kontinuierlich mit verschiedenen Preisen ausgezeichnet, darunter mit dem renommierten „Best Author of the year“ bei SQLShack.,
Raj ist immer an neuen Herausforderungen interessiert, wenn Sie also Beratungshilfe zu einem Thema benötigen, das in seinen Schriften behandelt wird, kann er bei Rajendra erreicht werden.gupta16@gmail.,com
Alle Beiträge von Rajendra Gupta anzeigen
- Durchführen von kleineren und größeren Versionsupgrades für AWS RDS SQL Server – 29.
- Migrieren Ihrer lokalen SQL – Datenbanken mit AWS DMS auf AWS RDS SQL Server-25. Januar 2021