これはMySQLユーザーによくあるエラーです。 MySQL 5.7では、デフォルトで、データベースは他のほとんどのSQLデータベースが何年にもわたって実施してきた標準的なセマンティクスを実施します。
ルールは、選択リストのすべての列が次のいずれかである必要があるということです。
- GROUPBY句で指定されています。つまり、それはあなたがグループ化しているものです。
- MIN、MAX()、SUM()、GROUP_CONCAT()などの集計関数の内部
- グループ化する列に機能的に依存します(これはMySQLの標準SQL動作への拡張であり、他のSQLデータベースは必ずしもこれをサポートしていません)。
クエリで(SELECT *
を展開します ):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
feature_keyでグループ化していますが、これは、他の列が上記のルールに準拠していないことを意味します。
これを修正する方法は次のとおりです:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
MAX(user_id)
を使用するのは冗長に見えるかもしれません WHERE句の条件に基づいて可能な値は1つしかないためです。しかし、害もありません。 MIN(user_id)
も機能します。
この同じエラーに関する私の過去の回答も参照してください: