Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur de syntaxe ou violation d'accès :1055 L'expression 8 de la liste SELECT n'est pas dans la clause GROUP BY et contient une colonne non agrégée

C'est une nouveauté de MySQL 5.7 et c'est un avertissement que votre requête est ambiguë.

Considérez le tableau suivant :

id    |   name    |   age    |   points
--------------------------------------------
1         Bob         21         1
2         James       14         1
3         Bob         21         3
4         James       14         2
5         Casey       17         3

Si vous avez fait la requête suivante :

SELECT name, age, SUM(points) FROM scores GROUP BY name

Puis le name colonne est utilisée pour le regroupement. Notez que age peut avoir plusieurs valeurs, il est donc "non agrégé". Vous devez faire quelque chose pour réduire ces valeurs.

Le comportement dans la version 5.6 et les versions précédentes consistait simplement à choisir le premier en fonction de l'ordre de tri, même si cela était parfois imprévisible et échouait. En 5.7, ils vous empêchent de le faire en premier lieu.

La solution ici est de regrouper sur cela également, ou d'appliquer un opérateur d'agrégation comme MIN() à elle.