sql >> Database teknologi >  >> RDS >> Sqlserver

Forstå sammenhængen mellem rangeringsfunktioner, OVER(), GROUP BY?

OVER() klausul er nødvendig, så SQL Server ved præcis, hvordan du vil bestemme ting som RANK() . Hvad RANK() forventer du, hvis du ikke leverer SQL Server med et bestillingskriterie? Er vinderen af ​​et løb den med hurtigste tid, langsomste tid eller fornavn alfabetisk?

Du behøver ikke at fjerne ORDER BY klausul, når du tilføjer en ORDER BY klausul inde i OVER() . Disse bruges uafhængigt - en til at bestemme RANK() og den anden til at diktere rækkefølgen.

Så hvis du for eksempel ville returnere deltagerne i et løb, men bestille dem sidstepladsen til førstepladsen, kan du sige:

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. Opdel tabellen i forskellige niveaukolonner

  2. Korrekt måde at spørge om mysql_num_rows i PHP

  3. Det er i detaljerne

  4. Brug af store bogstaver i dag- og månedsnavne ved formatering af datoer i Oracle