Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Syntaxfehler oder Zugriffsverletzung:1055 Ausdruck Nr. 8 der SELECT-Liste befindet sich nicht in der GROUP BY-Klausel und enthält eine nicht aggregierte Spalte

Dies ist eine neue Sache in MySQL 5.7 und ist eine Warnung, dass Ihre Abfrage mehrdeutig ist.

Betrachten Sie die folgende Tabelle:

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

Wenn Sie die folgende Abfrage durchgeführt haben:

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

Dann der name Spalte dient zur Gruppierung. Beachten Sie das age kann mehrere Werte haben, also ist es "nicht aggregiert". Sie müssen etwas tun, um diese Werte zu reduzieren.

Das Verhalten in 5.6 und früheren Versionen bestand darin, je nach Sortierreihenfolge einfach die erste auszuwählen, obwohl dies manchmal unvorhersehbar war und fehlschlagen würde. In 5.7 hindern sie Sie daran, es überhaupt zu tun.

Die Lösung hier ist, auch danach zu gruppieren oder einen Aggregatoperator wie MIN() anzuwenden dazu.