Microsoft SQL Server
Rankingfunktioner
Sök…
Syntax
- DENSE_RANK () OVER ([<partition_by_clause>] <order_by_clause>)
- RANK () OVER ([partition_by_clause] order_by_clause)
parametrar
Argument | detaljer |
---|---|
<partition_by_clause> | Delar resultatuppsättningen som producerats av FROM- klausulen i partitioner som DENSE_RANK funktionen tillämpas på. För PARTITION BY , se OVER Clause (Transact-SQL) . |
<order_by_clause> | Bestämmer i vilken ordning DENSE_RANK funktionen tillämpas på raderna i en partition. |
OVER ( [ partition_by_clause ] order_by_clause) | partition_by_clause delar resultatuppsättningen som produceras av FROM klausulen i partitioner som funktionen tillämpas på. Om det inte anges behandlar funktionen alla rader i frågeställningsresultatet som en enda grupp. order_by_clause bestämmer ordningen på data innan funktionen tillämpas. Order_by_clause krävs. <rows or range clause> för OVER klausulen kan inte anges för RANK funktionen. Mer information finns i OVER Clause (Transact-SQL) . |
Anmärkningar
Om två eller flera rader binder för en rang i samma partition får varje bundna rader samma rang. Till exempel, om de två bästa säljarna har samma SalesYTD-värde, rankas de båda som en. Säljaren med näst högsta SalesYTD är rankad som nummer två. Detta är mer än antalet distinkta rader som kommer före den här raden. Därför har siffrorna som returneras av DENSE_RANK
funktionen inte luckor och har alltid i följd.
Den sorteringsordning som används för hela frågan avgör i vilken ordning raderna visas i ett resultat. Detta innebär att en rad rankad som nummer en inte behöver vara den första raden i partitionen.
DENSE_RANK
är nollbestämd. För mer information, se Deterministiska och nondeterministiska funktioner .
RANG()
A RANK () Returnerar rangordningen för varje rad i resultatuppsättningen av den partitionerade kolumnen.
T.ex :
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 ()
Samma som RANK (). Det returnerar rang utan några luckor:
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