Der OVER()
-Klausel wird benötigt, damit SQL Server genau weiß, wie Sie Dinge wie RANK()
bestimmen möchten . Welcher RANK()
erwarten Sie, wenn Sie SQL Server nicht mit einem Sortierkriterium versorgen? Ist der Gewinner eines Rennens derjenige mit der schnellsten Zeit, der langsamsten Zeit oder dem Vornamen in alphabetischer Reihenfolge?
Sie müssen den ORDER BY
nicht entfernen -Klausel, wenn Sie ein ORDER BY
hinzufügen -Klausel innerhalb von OVER()
. Diese werden unabhängig voneinander verwendet - einer, um den RANK()
zu bestimmen und die andere, um die Reihenfolge zu diktieren.
Wenn Sie beispielsweise die Finisher eines Rennens zurückgeben möchten, sie aber vom letzten Platz zum ersten Platz ordnen möchten, könnten Sie sagen:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last