Fonctions d'agrégation MySQL : le dilemme GROUP BY
Dans MySQL, les fonctions d'agrégation peuvent être utilisées dans une instruction SELECT sans définir explicitement un GROUP BY clause, tandis que d'autres systèmes de base de données comme SQL Server peuvent générer une erreur. Ce comportement soulève des questions sur la raison pour laquelle MySQL autorise l'exécution de telles requêtes.
La conception MySQL
MySQL autorise les fonctions d'agrégation dans la liste SELECT sans clause GROUP BY comme extension au standard SQL. Sans regroupement, la base de données suppose un seul groupe indéterminé et n'importe quelle valeur de nom peut être choisie pour ce groupe. Ce comportement permet une agrégation plus facile des données sur une table entière.
Exemple de requête
Considérez la requête :
SELECT name, MAX(age) FROM t;
Sans GROUP BY clause, MySQL renvoie une seule ligne avec la valeur du prénom rencontré et la valeur d'âge maximale de la table entière.
ONLY_FULL_GROUP_BY Setting
MySQL version 5.7.5 et versions ultérieures introduit le paramètre ONLY_FULL_GROUP_BY, qui contrôle la gestion des fonctions d'agrégation sans clause GROUP BY. L'activation de ce paramètre nécessite la présence d'une clause GROUP BY pour toute utilisation de fonction d'agrégation.
Conclusion
Le comportement de MySQL consistant à autoriser les fonctions d'agrégation sans clause GROUP BY offre une flexibilité pour agréger les données sur une table entière. Cependant, le paramètre ONLY_FULL_GROUP_BY peut imposer un respect plus strict de la norme SQL pour une agrégation plus contrôlée.
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!