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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow