sql >> Databasteknik >  >> RDS >> Sqlserver

Förstå sambandet mellan rankningsfunktioner, OVER(), GROUP BY?

OVER() klausul behövs så att SQL Server vet exakt hur du vill bestämma saker som RANK() . Vad RANK() förväntar du dig om du inte förser SQL Server med beställningskriterier? Är vinnaren av ett lopp den som har snabbast tid, långsammast tid eller förnamn alfabetiskt?

Du behöver inte ta bort ORDER BY klausul när du lägger till en ORDER BY sats i OVER() . Dessa används oberoende - en för att bestämma RANK() och den andra för att diktera ordning.

Så, till exempel, om du vill returnera de som har avslutat ett lopp, men beställer dem sista plats till första plats, kan du säga:

SELECT 
  name, 
  finish_time, 
  [rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM 
  dbo.race_table
ORDER BY 
  finish_time DESC; -- fastest last


  1. Hur använder man en procent (%) i en LIKE utan att den behandlas som ett jokertecken?

  2. Postgresql:Ogiltigt reguljärt uttryck:ogiltigt tillbakareferensnummer

  3. SQL Injection attack - Vad gör detta?

  4. Kryptera lösenord innan du lagrar i databasen?