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;
最详细的文档说明在官网找到了。
来源: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
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
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