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