sql >> Databasteknik >  >> RDS >> Mysql

Syntaxfel eller åtkomstöverträdelse:1055 Uttryck #8 i SELECT-listan finns inte i GROUP BY-satsen och innehåller icke-aggregerad kolumn

Detta är en ny sak i MySQL 5.7 och är en varning om att din fråga är tvetydig.

Tänk på följande tabell:

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

Om du gjorde följande fråga:

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

Sedan name kolumn används för gruppering. Observera att age kan ha flera värden, så det är "icke aggregerat". Du måste göra något för att kollapsa dessa värden.

Beteendet i 5.6 och tidigare var att bara välja den första beroende på sorteringsordning, även om detta ibland var oförutsägbart och skulle misslyckas. I 5.7 hindrar de dig från att göra det i första hand.

Lösningen här är att gruppera på det också, eller att tillämpa en aggregatoperator som MIN() till det.



  1. Hur kontrollerar man om en variabel är NULL och ställer in den med en MySQL-lagrad procedur?

  2. Funderar på att extrahera data mellan parenteser i en sträng via MYSQL

  3. Jag fick felet Ostödd sökning "icontains" för CharField eller gå med på fältet är inte tillåtet.

  4. NOT IN i postgresql fungerar inte