Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Kann ich in einer SQL-Abfrage mit Fensterfunktion gruppieren?

Das Erste, woran Sie denken sollten, ist, dass Fensterfunktionen (wie OVER() -Klausel) bearbeiten das Ergebnis der Abfrage. Das heißt:Der Server führt zuerst die Abfrage aus und wendet erst dann die von Ihnen definierte Fensterfunktion an.

Das bedeutet, dass Sie tatsächlich eine Fensterfunktion und eine Gruppieren-nach-Klausel in derselben Abfrage verwenden können, aber Sie müssen sie wie folgt kapseln:

SELECT department_id,
       min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;

Ich stimme jedoch zu, dass dies kein guter Ort ist, um die Fensterfunktion zu verwenden. Matts Vorschlag ist hier am besten (ROW_NUMBER() im CTE oder subquery , und wählen Sie dann nur die gewünschten Zeilen im Haupt-SELECT aus ).