HAVING sans GROUP BY
Selon la norme SQL, une clause HAVING est généralement utilisée en conjonction avec une clause GROUP BY pour filtrer les groupes de lignes basées sur des calculs agrégés effectués sur ces groupes. Cependant, certains systèmes de bases de données permettent d'utiliser une clause HAVING sans GROUP BY.
Question :
Est-il possible d'utiliser une clause HAVING sans GROUP BY selon le Standard SQL ?
Réponse :
Oui, il est possible d'utiliser une clause HAVING sans GROUP BY en SQL Standard. Cependant, le comportement de ces requêtes varie en fonction du système de base de données utilisé.
Comportement MySQL :
Dans MySQL, une clause HAVING sans GROUP BY est autorisée, à condition que la première ligne du jeu de résultats a la valeur maximale pour la colonne agrégée. Ce comportement s'écarte du standard SQL, qui nécessite généralement une clause GROUP BY en présence d'une clause HAVING.
Interprétation du standard SQL :
Le standard SQL définit un HAVING comme agissant sur des agrégats calculés sur l'ensemble de résultats produit par une clause GROUP BY. Sans clause GROUP BY, il devient difficile de savoir à quelles lignes la clause HAVING fait référence.
Par conséquent, selon la norme SQL, une clause HAVING sans GROUP BY n'est pas strictement valide. Cependant, certains systèmes de bases de données, tels que MySQL, peuvent autoriser de telles requêtes pour des raisons de compatibilité.
Exemple SQL standard valide :
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
Cette requête est valide en SQL standard. et renverra une seule ligne avec une colonne contenant la valeur « T » s'il existe des livres avec des nombres différents de pages.
Conclusion :
Bien que l'utilisation d'une clause HAVING sans GROUP BY puisse être pratique dans certains scénarios, il est important de noter que le comportement de telles requêtes n'est pas standardisés et peuvent varier selon les systèmes de bases de données. Pour une compatibilité fiable entre les bases de données, il est recommandé d'utiliser GROUP BY en conjonction avec HAVING lors du filtrage des calculs agrégés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!