Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd składni lub naruszenie dostępu:1055 Wyrażenie #8 listy SELECT nie znajduje się w klauzuli GROUP BY i zawiera kolumnę niezagregowaną

Jest to nowa rzecz w MySQL 5.7 i jest ostrzeżeniem, że Twoje zapytanie jest niejednoznaczne.

Rozważ poniższą 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

Jeśli wykonałeś następujące zapytanie:

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

Następnie name kolumna służy do grupowania. Zwróć uwagę, że age może mieć wiele wartości, więc jest „niezagregowana”. Musisz coś zrobić, aby zwinąć te wartości.

Zachowanie w wersji 5.6 i wcześniejszych polegało na wybraniu pierwszego w zależności od kolejności sortowania, chociaż czasami było to nieprzewidywalne i kończyło się niepowodzeniem. W wersji 5.7 w pierwszej kolejności uniemożliwiają ci to.

Rozwiązaniem jest tutaj również grupowanie lub zastosowanie operatora agregującego, takiego jak MIN() do niego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz wszystkie sekwencyjne bloki z listy

  2. Funkcja PHP MySQL Delete w pętli while

  3. pojedyncze zapytanie jooq z relacją jeden do wielu

  4. Wykres do aktualizacji z listy rozwijanej

  5. MySQL:unikalne pole musi być indeksem?