Maison  >  Article  >  base de données  >  Fonctions d'agrégation MySQL sans GROUP BY : pourquoi et comment ?

Fonctions d'agrégation MySQL sans GROUP BY : pourquoi et comment ?

DDD
DDDoriginal
2024-11-06 05:42:02480parcourir

MySQL Aggregate Functions Without GROUP BY: Why and How?

Fonctions d'agrégation MySQL sans GROUP BY : pourquoi et comment ?

Contrairement à d'autres systèmes de gestion de bases de données relationnelles (SGBDR) qui génèrent une erreur lorsqu'un La fonction d'agrégation apparaît dans la liste SELECT sans clause GROUP BY, MySQL le permet. Ce comportement a intrigué les développeurs, conduisant à la requête suivante :

Pourquoi MySQL autorise-t-il les fonctions d'agrégation sans GROUP BY ?

Réponse :

La philosophie de conception de MySQL permet des fonctionnalités étendues au-delà de la norme SQL. Autoriser les fonctions d'agrégation sans GROUP BY est l'une de ces extensions.

Lors de l'exécution d'une requête telle que SELECT col1,col2,sum(col3) FROM tbl1, MySQL regroupe efficacement les lignes par toutes les colonnes non agrégées (dans ce cas). cas, col1 et col2). Il renvoie ensuite le résultat de la fonction d'agrégation (somme de col3) pour le seul groupe indéterminé.

Les versions antérieures de MySQL autorisaient ce comportement par défaut. Cependant, à partir de MySQL 5.7.5, le mode SQL ONLY_FULL_GROUP_BY a été introduit pour appliquer une conformité SQL plus stricte et interdire les requêtes avec des fonctions d'agrégation sans GROUP BY. Ce mode peut être activé ou désactivé selon les besoins. Par défaut, il est activé dans les versions MySQL 8.0 et supérieures.

Notes supplémentaires :

  • La documentation sur la gestion de groupe dans MySQL fournit plus de détails à ce sujet comportement.
  • Le mode SQL ONLY_FULL_GROUP_BY peut aider à garantir la compatibilité avec d'autres SGBDR et à améliorer les performances en évitant les calculs inutiles.

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