Traitement unique par MySQL des fonctions d'agrégation sans GROUP BY
Dans MySQL, contrairement à d'autres systèmes de gestion de bases de données relationnelles, il est possible d'utiliser des fonctions d'agrégation dans la liste SELECT sans spécifier de clause GROUP BY. Ce comportement a soulevé des questions parmi les développeurs familiers avec les plates-formes de SGBD plus restrictives.
La justification de MySQL
MySQL permet cette flexibilité dès sa conception, le considérant comme une extension précieuse du SQL standard. Lorsqu'une fonction d'agrégation est utilisée en l'absence de GROUP BY, le résultat renvoyé représente une seule ligne contenant la valeur agrégée calculée sur l'ensemble de la table. Cela peut être utile dans les scénarios où des informations récapitulatives sont souhaitées sans avoir besoin de regroupement.
Exemple
Par exemple, considérons la requête :
SELECT col1, col2, SUM(col3) FROM tbl1;
Sans GROUP BY, MySQL interprète cela comme un groupe unique et fournit le résultat suivant :
col1 col2 SUM(col3) ------------------------- (First row value of col1) (First row value of col2) (Sum of all col3 values)
Limitations avec ONLY_FULL_GROUP_BY
L'approche indulgente de MySQL en matière de gestion des agrégats les fonctions sans GROUP BY ont été introduites avec ONLY_FULL_GROUP_BY défini sur OFF. Avec la version 5.7.5 de MySQL, ONLY_FULL_GROUP_BY est activé par défaut, ce qui restreint ce comportement.
L'activation de ONLY_FULL_GROUP_BY garantit que les fonctions d'agrégation ne peuvent être utilisées qu'en conjonction avec une clause GROUP BY, ce qui entraîne une erreur si une requête sans elle est rencontrée. Ce changement s'aligne sur la norme SQL et favorise la cohérence des données.
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!