Fonctions d'agrégation MySQL sans GROUP BY : pourquoi et comment
Dans MySQL, les fonctions d'agrégation peuvent être utilisées dans des listes SELECT sans spécifier de GROUP BY clause, contrairement à d’autres SGBDR tels que SQL Server. Ce comportement, qui peut sembler inattendu, est en fait un choix de conception délibéré.
Lorsqu'une fonction d'agrégation est utilisée sans GROUP BY, MySQL traite l'ensemble des résultats comme un seul groupe. Cela signifie que la fonction d'agrégation renvoie une valeur unique pour l'ensemble de la table ou du sous-ensemble spécifié dans la requête.
Par exemple, la requête SELECT col1,col2,sum(col3) FROM tbl1; renvoie une seule ligne contenant les premières valeurs de col1 et col2, ainsi que la somme de toutes les valeurs de col3. Ce comportement peut être utile dans les scénarios où vous devez calculer des statistiques récapitulatives sans regrouper les données.
Le comportement des fonctions d'agrégation sans GROUP BY peut être modifié à l'aide du mode SQL du serveur ONLY_FULL_GROUP_BY. Par défaut, ce mode est désactivé dans les versions MySQL antérieures à 5.7.5. Cependant, il peut être activé pour interdire les fonctions d'agrégation sans GROUP BY.
Pour activer ONLY_FULL_GROUP_BY, ajoutez la ligne suivante à votre fichier de configuration MySQL (généralement my.cnf) :
sql-mode=ONLY_FULL_GROUP_BY
Une fois activé, MySQL générera une erreur pour les requêtes qui utilisent des fonctions d'agrégation sans GROUP BY. Cela peut aider à garantir l’intégrité des données et à éviter des résultats incorrects.
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!