Microsoft SQL Server
Ranking-Funktionen
Suche…
Syntax
- DENSE_RANK () OVER ([<partition_by_clause>] <order_by_clause>)
- RANK () OVER ([partition_by_clause] order_by_clause)
Parameter
Argumente | Einzelheiten |
---|---|
<partition_by_clause> | Teilt die von der FROM- Klausel erzeugte Ergebnismenge in Partitionen, auf die die DENSE_RANK Funktion angewendet wird. Für die PARTITION BY Syntax siehe OVER-Klausel (Transact-SQL) . |
<order_by_clause> | Bestimmt die Reihenfolge, in der die DENSE_RANK Funktion auf die Zeilen in einer Partition angewendet wird. |
OVER ( [ partition_by_clause ] order_by_clause) | partition_by_clause unterteilt die von der FROM Klausel erzeugte Ergebnismenge in Partitionen, auf die die Funktion angewendet wird. Wenn nicht angegeben, behandelt die Funktion alle Zeilen der Abfrageergebnisgruppe als eine einzige Gruppe. order_by_clause legt die Reihenfolge der Daten fest, bevor die Funktion angewendet wird. Die order_by_clause ist erforderlich. Die <rows or range clause> der OVER Klausel kann für die RANK Funktion nicht angegeben werden. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL) . |
Bemerkungen
Wenn zwei oder mehr Zeilen für einen Rang in derselben Partition identisch sind, erhält jede verbundene Zeile den gleichen Rang. Wenn beispielsweise die beiden Top-Vertriebsmitarbeiter den gleichen SalesYTD-Wert haben, werden sie beide auf Platz eins gesetzt. Der Verkäufer mit dem nächsthöheren SalesYTD steht auf Platz zwei. Dies ist eine Zahl mehr als die Anzahl der verschiedenen Reihen, die vor dieser Reihe stehen. Daher haben die von der Funktion DENSE_RANK
zurückgegebenen Zahlen keine Lücken und haben immer aufeinanderfolgende Ränge.
Die für die gesamte Abfrage verwendete Sortierreihenfolge bestimmt die Reihenfolge, in der die Zeilen in einem Ergebnis angezeigt werden. Dies bedeutet, dass eine Zeile mit der Nummer Eins nicht die erste Zeile in der Partition sein muss.
DENSE_RANK
ist nicht deterministisch. Weitere Informationen finden Sie unter Deterministische und Nicht-Deterministische Funktionen .
RANG()
A RANK () Gibt den Rang jeder Zeile in der Ergebnismenge der partitionierten Spalte zurück.
Z.B :
Select Studentid,Name,Subject,Marks,
RANK() over(partition by name order by Marks desc)Rank
From Exam
order by name,subject
Studentid Name Subject Marks Rank
101 Ivan Maths 70 2
101 Ivan Science 80 1
101 Ivan Social 60 3
102 Ryan Maths 60 2
102 Ryan Science 50 3
102 Ryan Social 70 1
103 Tanvi Maths 90 1
103 Tanvi Science 90 1
103 Tanvi Social 80 3
DENSE_RANK ()
Entspricht dem von RANK (). Es gibt den Rang ohne Lücken zurück:
Select Studentid, Name,Subject,Marks,
DENSE_RANK() over(partition by name order by Marks desc)Rank
From Exam
order by name
Studentid Name Subject Marks Rank
101 Ivan Science 80 1
101 Ivan Maths 70 2
101 Ivan Social 60 3
102 Ryan Social 70 1
102 Ryan Maths 60 2
102 Ryan Science 50 3
103 Tanvi Maths 90 1
103 Tanvi Science 90 1
103 Tanvi Social 80 2