質問: ### 前提・実現したいこと user | code | name | | --- | --- | | 1 | 太郎 | | 2 | 花子 | | 3 | 二郎 | price | code | user_id | price | | --- | --- | --- | | 1 | 1 | 300 | | 2 | 1 | 400 | | 3 | 2 | 500 | | 4 | 3 | 800 | | 5 | 2 | 100 | このような2つのテーブルから、人物毎の金額合計を多い順に表示したい。 以下が表示後の理想です。 ↓ | user_id | name | price | | --- | --- | --- | | 3 | 二郎 | 800 | | 1 | 太郎 | 700 | | 2 | 花子 | 600 | ### 該当のソースコード ``` SELECT user.name, price.user_id, SUM(price.price) FROM user JOIN price ON user.code=price.user_id GROUP BY user.name ``` 現在は上のように書いています。 多い順への並び替えは最後に記述しようと思い、まだ書いていません。 ひとまず、結合・合計を表示したかったのですが、上のコードだとエラーが出てしまいます。 ``` SELECT user.name, reward.user_id, SUM(reward.reward) FROM user JOIN reward ON user.code=reward.user_id GROUP BY user.name LIMIT 0, 30 ``` ``` #1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.reward.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by ``` ### 試したこと SUM()と GROUP BY user.nameの記述を消すとエラーは消えて以下のように表示されます。 | user_id | name | price | | --- | --- | --- | | 1 | 太郎 | 300 | | 1 | 太郎 | 400 | | 2 | 花子 | 500 | | 3 | 二郎 | 800 | | 2 | 花子 | 100 | なので、SUMやGROUP BYの書き方に問題があるのはわかるのですが、どのように直せば解決できるのかがわかりません。 わかる方いましたら、教えていただけると幸いです。 よろしくお願いします。 ### 補足情報(FW/ツールのバージョンなど) MySQLを使っています。
回答: コメントで完結しちゃったけど解決したらしいのでこれを回答としておきます。 > > あとこれも基本的なところで、GROUP BYに含まれない項目をSELECT句で使う場合はSUMなりMAXなりMINなり、何らかの集計対象にしないといけません。 > > おそらく理解できてないのはこのあたりだと思います。 > > userIdでGROUP BYしてSELECTではuserIdと金額のSUMだけ指定したものをサブクエリとして、そのサブクエリにその他必要なマスタ情報(この場合はuserの名前)はJOINして持ってこればたぶん完成します。 > > >