Maison > Questions et réponses > le corps du texte
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;
怪我咯2017-05-18 10:54:23
最详细的文档说明在官网找到了。
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...
给我你的怀抱2017-05-18 10:54:23
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...
怪我咯2017-05-18 10:54:23
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
天蓬老师2017-05-18 10:54:23
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
怪我咯2017-05-18 10:54:23
select * from user group by user_name;
//这么写其实也没问题 但是 实际上 你使用 group by 的时候 你需要用的 就只有 user_name 这个字段吧(通常来说)
//用什么字段就取什么字段就好。不一定要用 ‘*’ 用谁取谁就好
伊谢尔伦2017-05-18 10:54:23
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.
黄舟2017-05-18 10:54:23
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é.
滿天的星座2017-05-18 10:54:23
Généralement, une combinaison de fonctions d'agrégation est plus couramment utilisée
给我你的怀抱2017-05-18 10:54:23
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