SQL GROUP BY
teratail.com
以下のようなデータで、クラスごとに最大点をとった人の
クラス、点数、名前を抜き出す
対象のデータ
studentテーブル
class | point | name |
A | 30 | 佐藤 |
A | 60 | 安田 |
A | 60 | 鈴木 |
B | 60 | 田中 |
B | 80 | 高橋 |
C | 30 | 山田 |
C | 50 | 伊藤 |
取り出したい形
class | point | name |
A | 60 | 安田 |
A | 60 | 鈴木 |
B | 80 | 高橋 |
C | 50 | 伊藤 |
SELECT * FROM student t1 WHERE point = ( SELECT max(point) FROM student t2 WHERE t2.class = t1.class GROUP BY class)
1,studentテーブルからpointが最大値と一致するものを取り出す
最大値はどうやって求めるかと言うと
2,GROUP BYでクラスごとに区切って最大値を求める
これだと行の数 = クラスの数になるから、where句で該当するものだけにする
これって外のwhere句のpointごとに内側のがまわるのかな
そうすると
studentのレコード数×studentをGROUP BYしてmaxを求める計算数
がかかるってことかな