Pierwszą rzeczą do zapamiętania jest to, że funkcje okienkowe (takie jak OVER()
klauzula) praca nad wynikiem zapytania. To znaczy:serwer najpierw wykonuje zapytanie, a dopiero potem stosuje zdefiniowaną przez Ciebie funkcję okienkową.
Oznacza to, że możesz faktycznie użyć funkcji okienkowej i klauzuli group by w tym samym zapytaniu, ale musisz ją zahermetyzować w następujący sposób:
SELECT department_id,
min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;
Zgadzam się jednak, że nie jest to dobre miejsce do korzystania z funkcji okienkowej. Propozycja Matta jest tutaj najlepsza (ROW_NUMBER()
w CTE
lub subquery
, a następnie zaznaczając tylko żądane wiersze w głównym SELECT
).