id | num | goal| sqd
1 | 10 | null| 中村俊輔
2 | 10 | 1 | 中村俊輔
3 | 10 | 2 | 中村俊輔
4 | 10 | 3 | 中村俊輔
5 | 9 | null| 松井大輔
6 | 7 | null| 遠藤保仁
7 | 7 | 1 | 遠藤保仁
8 | 7 | 2 | 遠藤保仁
9 | 22 | null| 阿部勇樹
10 | 22 | 1 | 阿部勇樹
背番号(num)ごとにgoal数の一番大きな値ひとつと、ノーゴール(Null値)の行を抜き出したいのですが、この場合のSQLの書き方をご教示ください。この例で言えば、
1 | 10 | null| 中村俊輔
4 | 10 | 3 | 中村俊輔
5 | 9 | null| 松井大輔
6 | 7 | null| 遠藤保仁
8 | 7 | 2 | 遠藤保仁
9 | 22 | null| 阿部勇樹
10 | 22 | 1 | 阿部勇樹
上記のような結果になるようなSQLになります。
以下の SQL 文ではいかがでしょうか。(SQLite 3.5.8 にて確認)
SELECT id, num, goal, sqd, (CASE WHEN goal IS NULL THEN 0 ELSE 1 END) AS temp FROM goals GROUP BY num, temp HAVING goal = MAX(goal) OR goal IS NULL ;
ただし、
・余計な列 (temp) が追加されてしまいますので、無視 or 邪魔でしたら削ってください。
・「null」は文字列の"null"でなくいわゆるnull値だと仮定しました。
※ temp なしで出来そうな気もするのですが思いつきませんでした。