sql >> Database >  >> RDS >> Sqlserver

Inzicht in de relatie tussen rangschikkingsfuncties, OVER(), GROUP BY?

De OVER() clausule is nodig zodat SQL Server precies weet hoe u zaken als RANK() . wilt bepalen . Wat RANK() verwacht u als u SQL Server niet aanlevert met een bestelcriterium? Is de winnaar van een race degene met de snelste tijd, de langzaamste tijd of de voornaam alfabetisch?

U hoeft de ORDER BY . niet te verwijderen clausule wanneer u een ORDER BY . toevoegt clausule binnen de OVER() . Deze worden onafhankelijk gebruikt - één om de RANK() . te bepalen en de andere om de bestelling te dicteren.

Dus als u bijvoorbeeld de finishers van een race wilt retourneren, maar ze van de laatste plaats naar de eerste plaats wilt rangschikken, zou u kunnen zeggen:

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. Reguliere expressie zoeken en vervangen in Postgres

  2. strip naam van e-mail in mysql zonder php is het mogelijk?

  3. MySQL in outfile-opmaak

  4. Hoe extraheer je een numerieke waarde uit een string in een MySQL-query?