院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

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を求める計算数
がかかるってことかな