前提・実現したいこと
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 |
該当のソースコード
sql
1SELECT 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を使っています。

回答1件
あなたの回答
tips
プレビュー