Điều đầu tiên cần nhớ là các hàm cửa sổ (như OVER()
mệnh đề) làm việc trên kết quả của truy vấn. Đó là:Đầu tiên máy chủ thực thi truy vấn và chỉ sau đó áp dụng chức năng cửa sổ do bạn xác định.
Điều này có nghĩa là bạn thực sự có thể sử dụng hàm cửa sổ và nhóm theo mệnh đề trong cùng một truy vấn, nhưng bạn cần phải đóng gói nó, như sau:
SELECT department_id,
min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;
Tuy nhiên, tôi đồng ý rằng đây không phải là một nơi tốt để sử dụng chức năng cửa sổ. Đề xuất của Matt là tốt nhất ở đây (ROW_NUMBER()
trong CTE
hoặc subquery
, sau đó chỉ chọn các hàng mong muốn trong SELECT
chính ).