OVER()
klausa diperlukan agar SQL Server tahu persis bagaimana Anda ingin menentukan hal-hal seperti RANK()
. Apa RANK()
yang Anda harapkan jika Anda tidak menyediakan SQL Server dengan kriteria pemesanan? Apakah pemenang lomba adalah yang memiliki waktu tercepat, waktu paling lambat, atau nama depan berdasarkan abjad?
Anda tidak perlu menghapus ORDER BY
klausa ketika Anda menambahkan ORDER BY
klausa di dalam OVER()
. Ini digunakan secara independen - satu untuk menentukan RANK()
dan yang lainnya untuk mendiktekan pemesanan.
Jadi, misalnya, jika Anda ingin mengembalikan yang menyelesaikan balapan, tetapi mengurutkannya dari tempat terakhir ke tempat pertama, Anda dapat mengatakan:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last