Maison >base de données >tutoriel mysql >Pourquoi les fonctions d'agrégation MySQL peuvent-elles être utilisées sans clause GROUP BY ?

Pourquoi les fonctions d'agrégation MySQL peuvent-elles être utilisées sans clause GROUP BY ?

DDD
DDDoriginal
2024-11-05 19:45:02669parcourir

Why Can MySQL Aggregate Functions Be Used Without a GROUP BY Clause?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn