Hal pertama yang harus diingat adalah fungsi berjendela (seperti OVER()
klausa) bekerja pada hasil kueri. Yaitu:Server pertama-tama mengeksekusi kueri dan baru kemudian menerapkan fungsi berjendela seperti yang Anda definisikan.
Ini berarti bahwa Anda sebenarnya dapat menggunakan fungsi berjendela dan mengelompokkan demi klausa dalam kueri yang sama, tetapi Anda perlu merangkumnya, seperti ini:
SELECT department_id,
min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;
Namun, saya setuju bahwa ini bukan tempat yang baik untuk menggunakan fungsi berjendela. Proposisi Matt adalah yang terbaik di sini (ROW_NUMBER()
di CTE
atau subquery
, lalu pilih hanya baris yang diinginkan di SELECT
main utama ).