aggregate functions in where clause
 Si vous omettez la clause GROUP BY, Oracle applique les fonctions d'agrégation de la liste de sélection à toutes les lignes de la table ou de la vue interrogée. Vous utilisez des fonctions d'agrégation dans la clause HAVING pour éliminer des groupes de la sortie en fonction des résultats des fonctions d'agrégation, plutôt que des valeurs des lignes individuelles de la table ou de la vue interrogée.  De nombreuses fonctions d'agrégation (mais pas toutes) qui acceptent un seul argument acceptent ces clauses : 1 DISTINCT et UNIQUE, qui sont synonymes, font qu'une fonction d'agrégation ne considère que les valeurs distinctes de l'expression de l'argument. 2 ALL amène une fonction d'agrégation à prendre en compte toutes les valeurs, y compris tous les doublons. La bonne façon d'utiliser max dans la clause have est d'effectuer d'abord une auto-jointure : sélectionnez t1.a, t1.b, t1.c de table1 t1 join table1 t1_max sur t1.id = t1_max.id group by t1.a, t1.b, t1.c ayant t1.date = max(t1_max.date) Voici comment joindre une sous-requête :  Dans une requête contenant une clause GROUP BY, les éléments de la liste de sélection peuvent être des fonctions d'agrégation, des expressions GROUP BY, des constantes ou des expressions impliquant l'une d'entre elles. Oracle applique les fonctions d'agrégation à chaque groupe de lignes et renvoie une seule ligne de résultat pour chaque groupe.  Certaines fonctions d'agrégation autorisent la clause windowing_clause, qui fait partie de la syntaxe des fonctions analytiques. Reportez-vous à windowing_clause pour plus d'informations sur cette clause. Dans le listing des fonctions d'agrégation à la fin de cette section, les fonctions qui autorisent la windowing_clause sont suivies d'un astérisque (*) Fonctions d'agrégation . Les fonctions d'agrégation renvoient une seule ligne de résultat basée sur des groupes de lignes, plutôt que sur des lignes uniques. Les fonctions d'agrégation peuvent apparaître dans les listes de sélection et dans les clauses ORDER BY et HAVING. Ils sont couramment utilisés avec la clause GROUP BY dans une instruction SELECT, où Oracle Database divise les lignes d'une table ou d'une vue interrogée en groupes.  Sql Server : Comment utiliser une fonction d'agrégation comme MAX dans une clause WHERE. 1 Vous pouvez utiliser une sous-requête... 2 Mais je déplacerais en fait cela hors de la clause Where et dans l'instruction de jointure, en tant que AND pour la clause ON.  En remarque (5+ ans plus tard), la clause HAVING est en fait destinée à être utilisée avec des éléments groupés. Cependant, il fonctionne avec les clauses d'agrégation (MIN, MAX, AVG) dans la plupart des moteurs SQL, même sans clause GROUP BY. Version sous-requête : oui, vous devez utiliser une clause have après la clause Group by, car le Where consiste simplement à filtrer les données sur des paramètres simples, mais group by suivi d'une instruction Have est l'idée de regrouper les données et de les filtrer. base d'une fonction d'agrégation......  Sql Server : Comment utiliser une fonction d'agrégation comme MAX dans une clause WHERE. Vous pouvez utiliser une sous-requête... WHERE t1.field3 = (SELECT MAX(st1.field3) FROM table1 AS st1) Mais je déplacerais en fait cela hors de la clause Where et dans l'instruction de jointure, en tant que AND pour le ON clause.
 Utilisez des fonctions d'agrégation dans la clause HAVING.