Het eerste dat u moet onthouden, is dat vensterfuncties (zoals OVER()
clausule) werken aan het resultaat van de query. Dat wil zeggen:de server voert eerst de query uit en pas daarna de door u gedefinieerde vensterfunctie toe.
Dit betekent dat je de vensterfunctie en de group by-clausule in dezelfde query kunt gebruiken, maar je moet het als volgt inkapselen:
SELECT department_id,
min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;
Ik ben het er echter mee eens dat dit geen goede plek is om de vensterfunctie te gebruiken. Matt's voorstel is hier het beste (ROW_NUMBER()
in CTE
of subquery
en selecteer vervolgens alleen de gewenste rijen in het hoofdvenster SELECT
).