Le problème du groupe par dans Mysql. .
某草草
某草草 2017-05-18 10:52:23
0
9
696

Dans Mysql, la méthode d'écriture suivante est autorisée. Mais est-ce strict ou non ? Est-ce que cela prend en charge une écriture comme celle-ci ? Si vous avez des doutes sur la façon de résoudre ce problème, aidez-moi.

select * from user group by user_name;
某草草
某草草

répondre à tous(9)
刘奇

最详细的文档说明在官网找到了。

MySQL 5.7.5 et versions ultérieures implémente la détection de la dépendance fonctionnelle. Si le mode SQL ONLY_FULL_GROUP_BY est activé (ce qui est le cas par défaut), MySQL rejette les requêtes pour lesquelles la liste de sélection, la condition HAVING ou la liste ORDER BY font référence à des colonnes non agrégées qui ne sont ni nommées dans la clause GROUP BY ni fonctionnellement dépendantes d'elles. . (Avant la version 5.7.5, MySQL ne détecte pas les dépendances fonctionnelles et ONLY_FULL_GROUP_BY n'est pas activé par défaut. Pour une description du comportement antérieur à la version 5.7.5, consultez le manuel de référence MySQL 5.6.)

来源:https://dev.mysql.com/doc/ref...

给我你的怀抱

Les champs de sélection doivent être forcés à être écrits en groupe par
sélectionnez le nom d'utilisateur du groupe d'utilisateurs par nom d'utilisateur ;

http://blog.csdn.net/u2830560...

刘奇

Tout d'abord, comprenez le concept de regroupement et quels types d'effets peuvent être obtenus après le regroupement ;
Le regroupement est destiné à une analyse statistique basée sur l'attribut du groupe ;
Par exemple, dans un tableau d'élèves, regroupé par sexe, vous pouvez compter ; combien de garçons et combien de filles.
La colonne de résultat de la requête doit être composée de fonctions d'agrégation telles que somme et nombre. Par exemple :
sélectionnez le nombre (*), le sexe du groupe d'étudiants par sexe ;
S'il s'agit de sélectionner * du groupe d'utilisateurs par nom_utilisateur ; quel type de résultat statistique souhaitez-vous obtenir ?
mysql5.6 peut utiliser cette méthode d'écriture select * from user group by user_name par défaut, mais l'instruction est en fait convertie en interne ;
mysql5.7 et versions ultérieures ne peuvent pas utiliser cette méthode d'écriture par défaut, et une erreur sera signalée.
Donc avant d'écrire, réfléchissez à ce dont j'ai besoin pour compter grâce au regroupement et utilisez les fonctions d'agrégation appropriées

Peter_Zhu

Trois points à noter lors de l'utilisation de GROUP BY dans les instructions SQL
1 : Les alias ne peuvent pas être utilisés ;
2 : Sauf pour les champs de fonction, les champs apparaissant dans select doivent apparaître dans group by,
3 : Les alias ne peuvent pas utiliser de mots réservés
Ces trois Il n'y a aucune exigence pour cliquer sur MYSQL !
Regardons à nouveau votre déclaration. Si la table utilisateur n'a qu'un seul champ nom_utilisateur, alors cette déclaration n'a aucun problème.
Si la table utilisateur a plus d'un champ, alors cette déclaration n'a aucun problème dans MySQL, mais il y a un problème. dans Oracle et SQLServer

刘奇
select * from user group by user_name;
//这么写其实也没问题 但是 实际上 你使用 group by 的时候 你需要用的 就只有 user_name 这个字段吧(通常来说)
//用什么字段就取什么字段就好。不一定要用 ‘*’ 用谁取谁就好
伊谢尔伦

Si le champ user_name existe, alors il n'y a pas de problème. Grouper par regroupe par champs. Il est généralement utilisé avec des fonctions d'agrégation SQL comme la vôtre peuvent également être exécutées. Cependant, user_name est généralement unique et cela n'a aucun sens de regrouper par champs uniques.

黄舟

Il s'agit d'une prise en charge de fonction spéciale pour MySQL. Comme l'a dit @xuexiphpa, elle peut être désactivée via les paramètres.

Mais il n'est pas recommandé de l'utiliser. Après le regroupement, le nombre d'enregistrements renvoyés est théoriquement inférieur à celui avant le regroupement. Généralement, certaines données statistiques seront renvoyées via des fonctions d'agrégation.
Utilisez select * directement sans confirmer quel enregistrement est renvoyé.

滿天的星座

Généralement, une combinaison de fonctions d'agrégation est plus couramment utilisée

给我你的怀抱

group by Après le regroupement par agrégation, il est préférable de conserver les éléments dans la clause select uniquement :
1, constante
2, nom de colonne spécifié par group by
3, fonction d'agrégation , comme count(), avg(), sum(*), etc.

Votre* résultat ne répertorie qu'un seul enregistrement pour chaque groupe, et vous ne savez pas s'il s'agit du premier ou d'une valeur aléatoire

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!