sql >> Database >  >> RDS >> Mysql

Syntaxisfout of toegangsfout:1055 Expressie #8 van de SELECT-lijst staat niet in de GROUP BY-clausule en bevat een niet-geaggregeerde kolom

Dit is nieuw in MySQL 5.7 en is een waarschuwing dat uw vraag dubbelzinnig is.

Bekijk de volgende tabel:

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

Als je de volgende vraag hebt gedaan:

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

Dan de name kolom wordt gebruikt om te groeperen. Merk op dat age kan meerdere waarden hebben, dus het is "niet-geaggregeerd". Je moet iets doen om die waarden samen te vouwen.

Het gedrag in 5.6 en eerder was om gewoon de eerste te kiezen, afhankelijk van de sorteervolgorde, hoewel dit soms onvoorspelbaar was en zou mislukken. In 5.7 voorkomen ze dat je het in de eerste plaats doet.

De oplossing hier is om daar ook op te groeperen, of om een ​​aggregatie-operator toe te passen zoals MIN() ernaartoe.



  1. Kan Mysql een kolom splitsen?

  2. Wat doet COMMIT?

  3. Zoek in 300 miljoen adressen met pg_trgm

  4. Paginering met behulp van PDO met MySQL