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