Microsoft SQL Server
Funkcje rankingowe
Szukaj…
Składnia
- DENSE_RANK () OVER ([<partition_by_clause>] <order_by_clause>)
- RANK () OVER ([podział_klucza] kolejność_klucza)
Parametry
Argumenty | Detale |
---|---|
<partition_by_clause> | Dzieli zestaw wyników wygenerowany przez klauzulę FROM na partycje, do których DENSE_RANK funkcję DENSE_RANK . Aby zapoznać się ze składnią PARTITION BY , zobacz OVER Clause (Transact-SQL) . |
<order_by_clause> | Określa kolejność DENSE_RANK funkcji DENSE_RANK do wierszy w partycji. |
OVER ( [ partition_by_clause ] order_by_clause) | partition_by_clause dzieli zestaw wyników wygenerowany przez klauzulę FROM na partycje, do których stosowana jest funkcja. Jeśli nie zostanie określony, funkcja traktuje wszystkie wiersze zestawu wyników zapytania jako pojedynczą grupę. order_by_clause określa kolejność danych przed zastosowaniem funkcji. Wymagana jest klauzula order_by_clause. <rows or range clause> Funkcja <rows or range clause> OVER nie może być określona dla funkcji RANK . Aby uzyskać więcej informacji, zobacz OVER Clause (Transact-SQL) . |
Uwagi
Jeśli dwa lub więcej wierszy wiąże się w randze w tej samej partycji, każdy związany wiersz otrzymuje tę samą pozycję. Na przykład, jeśli dwaj najlepsi sprzedawcy mają tę samą wartość SalesYTD, oboje mają jedną pozycję. Sprzedawca z kolejnym najwyższym SalesYTD zajmuje drugie miejsce. Jest to o jeden więcej niż liczba różnych wierszy poprzedzających ten wiersz. Dlatego liczby zwracane przez funkcję DENSE_RANK
nie mają przerw i zawsze mają kolejne rangi.
Kolejność sortowania zastosowana dla całego zapytania określa kolejność, w jakiej wiersze pojawiają się w wyniku. Oznacza to, że wiersz numer jeden w rankingu nie musi być pierwszym wierszem w partycji.
DENSE_RANK
jest niedeterministyczny. Aby uzyskać więcej informacji, zobacz Funkcje deterministyczne i niedeterministyczne .
RANGA()
RANK () Zwraca pozycję każdego wiersza w zestawie wyników podzielonej na partycje kolumny.
Np .:
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 ()
Taki sam jak RANK (). Zwraca rangę bez żadnych luk:
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