Първото нещо, което трябва да запомните е, че прозоречните функции (като OVER()
клауза) работят върху резултата от заявката. Тоест:сървърът първо изпълнява заявката и едва след това прилага прозоречната функция, както е дефинирана от вас.
Това означава, че всъщност можете да използвате прозоречна функция и група по клауза в една и съща заявка, но трябва да я капсулирате по следния начин:
SELECT department_id,
min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;
Съгласен съм обаче, че това не е добро място за използване на прозоречна функция. Предложението на Мат е най-доброто тук (ROW_NUMBER()
в CTE
или subquery
, след което изберете само желаните редове в главния SELECT
).