sql >> Database >  >> RDS >> Oracle

Kan ik groeperen in SQL-query met vensterfunctie?

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 ).



  1. Mysql werkt met door komma's gescheiden lijst - Junction table

  2. Selecteer de eerste rij van elke groep in sql

  3. Oracle-datum lijkt gelijk aan

  4. MySQL Selecteer rijen bij het eerste optreden van elke unieke waarde