Maison > base de données > tutoriel mysql > Comment MySQL gère-t-il les colonnes non agrégées dans les clauses GROUP BY ?

Comment MySQL gère-t-il les colonnes non agrégées dans les clauses GROUP BY ?

Barbara Streisand
Libérer: 2024-12-09 21:08:18
original
429 Les gens l'ont consulté

How Does MySQL Handle Non-Aggregated Columns in GROUP BY Clauses?

Colonnes non agrégées dans MySQL GROUP BY : un écart par rapport à la norme

L'implémentation MySQL de GROUP BY permet l'inclusion de colonnes non agrégées dans la liste SELECT, même s'ils ne sont pas inclus dans les critères de regroupement. Ce comportement diffère de la norme ANSI SQL, qui interdit la sélection de colonnes non groupées dans de telles requêtes.

Cet écart découle du concept de dépendance fonctionnelle. Dans MySQL, si une colonne non groupée dépend fonctionnellement de la colonne de regroupement, MySQL choisit et renvoie silencieusement une valeur unique pour cette colonne. Cependant, il est important de noter que de telles requêtes peuvent conduire à des résultats ambigus si la dépendance fonctionnelle n'est pas appliquée.

Par exemple, la requête suivante serait invalide en ANSI SQL :

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;
Copier après la connexion

Dans MySQL, cette requête est autorisée car people.col4 dépend fonctionnellement de table1.personID via la jointure. Cependant, si plusieurs personnes ont le même personID, le résultat pour people.col4 pourrait être arbitraire.

Pour éviter de telles ambiguïtés, MySQL fournit le mode SQL ONLY_FULL_GROUP_BY, qui applique des règles de regroupement plus strictes conformément à la norme ANSI. Par défaut, ce mode n'est pas activé, mais il peut être activé pour garantir que les requêtes respectent le comportement standard.

Notez que SQLite autorise également les colonnes non agrégées dans les requêtes GROUP BY, mais il sélectionne la dernière valeur dans le groupe au lieu d'être arbitraire. Il ne faut pas se fier à ce comportement, car il pourrait changer dans les versions futures. Pour éviter les ambiguïtés, il est recommandé de réécrire les requêtes pour qu'elles soient sans ambiguïté et déterministes.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal