Zoeken…


Syntaxis

  • DENSE_RANK () OVER ([<partition_by_clause>] <order_by_clause>)
  • RANK () OVER ([partition_by_clause] order_by_clause)

parameters

argumenten Details
<partition_by_clause> Deelt de resultatenset geproduceerd door de clausule FROM in partities waarop de functie DENSE_RANK wordt toegepast. Zie OVER-clausule (Transact-SQL) voor de syntaxis van PARTITION BY .
<order_by_clause> Bepaalt de volgorde waarin de functie DENSE_RANK wordt toegepast op de rijen in een partitie.
OVER ( [ partition_by_clause ] order_by_clause) partition_by_clause verdeelt de resultatenset geproduceerd door de clausule FROM in partities waarop de functie wordt toegepast. Indien niet opgegeven, behandelt de functie alle rijen van het queryresultaat dat als één groep is ingesteld. order_by_clause bepaalt de volgorde van de gegevens voordat de functie wordt toegepast. De order_by_clause is verplicht. De <rows or range clause> van de OVER clausule kan niet worden opgegeven voor de RANK functie. Zie OVER-clausule (Transact-SQL) voor meer informatie.

Opmerkingen

Als twee of meer rijen overeenkomen voor een rang in dezelfde partitie, krijgt elke gekoppelde rij dezelfde rang. Als de twee beste verkopers bijvoorbeeld dezelfde SalesYTD-waarde hebben, staan ze allebei op één. De verkoper met de op één na hoogste SalesYTD staat op nummer twee. Dit is er één meer dan het aantal afzonderlijke rijen dat vóór deze rij komt. Daarom hebben de nummers die worden geretourneerd door de functie DENSE_RANK geen gaten en hebben ze altijd opeenvolgende rangen.

De sorteervolgorde die voor de hele query wordt gebruikt, bepaalt de volgorde waarin de rijen in een resultaat verschijnen. Dit betekent dat een rij met nummer één niet de eerste rij in de partitie hoeft te zijn.

DENSE_RANK is niet-deterministisch. Zie Deterministische en niet-deterministische functies voor meer informatie.

RANG()

Een RANK () Retourneert de rang van elke rij in de resultatenset van de gepartitioneerde kolom.

Bijv .:

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 ()

Hetzelfde als dat van RANK (). Het geeft rang zonder gaten:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow