OVER()
klauzula jest potrzebna, aby SQL Server dokładnie wiedział, jak chcesz określić takie rzeczy, jak RANK()
. Co RANK()
oczekujesz, jeśli nie dostarczysz SQL Server z kryteriami zamawiania? Czy zwycięzcą wyścigu jest ten z najszybszym czasem, najwolniejszym czasem, czy też z imieniem w kolejności alfabetycznej?
Nie musisz usuwać ORDER BY
klauzula podczas dodawania ORDER BY
klauzula wewnątrz OVER()
. Są one używane niezależnie - jeden do określenia RANK()
a drugi dyktuje zamawianie.
Na przykład, jeśli chcesz przywrócić finiszerów wyścigu, ale zamów im ostatnie miejsce na pierwsze miejsce, możesz powiedzieć:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last