Oracle
 sql >> Base de données >  >> RDS >> Oracle

Puis-je grouper par dans une requête SQL avec la fonction de fenêtre ?

La première chose à retenir est que les fonctions fenêtrées (comme OVER() clause) travaillent sur le résultat de la requête. C'est-à-dire :le serveur exécute d'abord la requête et ensuite seulement applique la fonction fenêtrée telle que définie par vous.

Cela signifie que vous pouvez réellement utiliser la fonction fenêtrée et la clause group by dans la même requête, mais vous devez l'encapsuler, comme ceci :

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

Cependant, je suis d'accord que ce n'est pas un bon endroit pour utiliser la fonction fenêtrée. La proposition de Matt est la meilleure ici (ROW_NUMBER() en CTE ou subquery , puis en sélectionnant uniquement les lignes souhaitées dans SELECT principal ).