OVER()
клаузата е необходима, така че SQL Server да знае точно как искате да определи неща като RANK()
. Какво RANK()
очаквате ли, ако не предоставите на SQL Server критерии за поръчка? Дали победителят в състезание е този с най-бързо време, най-бавно време или първото име по азбучен ред?
Не е необходимо да премахвате ORDER BY
клауза, когато добавите ORDER BY
клауза вътре в OVER()
. Те се използват независимо - един за определяне на RANK()
а другият да диктува подреждането.
Така че, например, ако искате да върнете завършилите в състезание, но да ги подредите от последното място до първото, можете да кажете:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last