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

So beheben Sie die Abfragegruppe mit only_full_group_by

Dies ist ein häufiger Fehler für MySQL-Benutzer. In MySQL 5.7 erzwingt die Datenbank standardmäßig die Standard-Semantik, die die meisten anderen SQL-Datenbanken seit Jahren erzwingen.

Die Regel ist, dass jede Spalte in Ihrer Auswahlliste eine der folgenden sein muss:

  • In der GROUP BY-Klausel benannt; d.h. es ist das, was Sie gruppieren.
  • Innerhalb einer Aggregatfunktion wie MIN, MAX(), SUM(), GROUP_CONCAT() usw.
  • Funktional abhängig von der Spalte, nach der Sie gruppieren (dies ist MySQLs Erweiterung des Standard-SQL-Verhaltens, und andere SQL-Datenbanken unterstützen dies nicht unbedingt).

In Ihrer Abfrage (ich erweitere Ihre SELECT * ):

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

Sie gruppieren nach feature_key, aber das bedeutet, dass die anderen Spalten nicht den oben beschriebenen Regeln entsprechen.

Hier ist eine Möglichkeit, das Problem zu beheben:

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

Es mag überflüssig erscheinen, MAX(user_id) zu verwenden da basierend auf der Bedingung der WHERE-Klausel nur ein Wert möglich ist. Aber es schadet auch nicht. MIN(user_id) würde auch gehen.

Siehe auch meine früheren Antworten zu demselben Fehler: