První věc, kterou si zapamatujte, je funkce v okně (jako OVER()
klauzule) pracovat na výsledku dotazu. To znamená:Server nejprve provede dotaz a teprve poté aplikuje vámi definovanou funkci v okně.
To znamená, že můžete skutečně použít funkci v okně a seskupit klauzuli ve stejném dotazu, ale musíte to zapouzdřit takto:
SELECT department_id,
min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;
Souhlasím však s tím, že toto není dobré místo pro použití funkce okna. Zde je nejlepší Mattův návrh (ROW_NUMBER()
v CTE
nebo subquery
a poté vyberte pouze požadované řádky v hlavním SELECT
).