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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow