Den første ting at huske er, at vinduesfunktioner (som OVER()
klausul) arbejde på resultatet af forespørgslen. Det vil sige:Server udfører først forespørgslen og anvender først derefter vinduesfunktionen som defineret af dig.
Dette betyder, at du faktisk kan bruge vinduesfunktion og gruppe for klausul i den samme forespørgsel, men du skal indkapsle det sådan:
SELECT department_id,
min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;
Jeg er dog enig i, at dette ikke er et godt sted at bruge vinduesfunktion. Matts forslag er bedst her (ROW_NUMBER()
i CTE
eller subquery
, og vælg derefter kun de ønskede rækker i hoved SELECT
).