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

Jak naprawić grupę zapytań za pomocą only_full_group_by

Jest to częsty błąd dla użytkowników MySQL. W MySQL 5.7 domyślnie baza danych wymusza standardową semantykę, którą większość innych baz danych SQL wymusza od lat.

Zasada jest taka, że ​​każda kolumna na liście wyboru musi być jedną z:

  • Nazwany w klauzuli GROUP BY; tj. to jest to, co grupujesz.
  • Wewnątrz funkcji agregującej, takiej jak MIN, MAX(), SUM(), GROUP_CONCAT() itp.
  • Funkcjonalnie zależne od kolumny, według której grupujesz (jest to rozszerzenie MySQL do standardowego zachowania SQL, a inne bazy danych SQL niekoniecznie to obsługują).

W twoim zapytaniu (rozwinię twój SELECT * ):

select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key

Grupujesz według feature_key, ale oznacza to, że inne kolumny nie są zgodne z zasadami opisanymi powyżej.

Oto sposób, aby to naprawić:

select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key

Użycie MAX(user_id) może wydawać się zbędne ponieważ na podstawie warunku klauzuli WHERE możliwa jest tylko jedna wartość. Ale też nie ma nic złego. MIN(user_id) również zadziała.

Zobacz także moje wcześniejsze odpowiedzi dotyczące tego samego błędu:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podziel wartość z jednego pola na dwa

  2. Wstaw MYSQL tam, gdzie nie istnieje z PDO

  3. Kubernetes nie kopiuje danych do zamontowanego wolumenu

  4. Błąd w przygotowanym oświadczeniu

  5. Konwertuj wynik sql na listę python