ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:desmost4 ベスト3の抽出方法
困り度:
  • すぐに回答を!
すごい単純な質問をしているのかもしれません。許してください。
例えば、ある学校の生徒の成績が蓄積されているテーブルがあるとします。そこからクラス毎にそれぞれ平均点がベスト3の生徒を抽出したい場合のSQLはどのようになりますでしょうか?

class name average
------+------+------
A 高橋 651
A 鈴木 711
A 古田 645
A 田中 821
A 前田 630
B 永田 840
B 前川 765
B 春川 811
B 上田 699

【結果】
class name average
------+------+------
A 田中 821
A 鈴木 711
A 高橋 651
B 永田 840
B 春川 811
B 前川 765

unionでくっつけるとか試したのですがあまりスマートなSQL文ができません。
申し訳ありませんがお知恵を貸してください。
質問投稿日時:06/07/20 03:26
質問番号:2287116
この質問に対する回答は締め切られました。

回答

良回答20pt

回答者:chukenkenkou 平均点は、静的に持つのですか?

こんな感じで、目的の結果は得られると思います。

select t."class",t."name",t."average"
from
(select x."class",x."name",x."average",count(*) as num
from oshiete_goo as x,oshiete_goo as y
where x."class"=y."class" and x."average"<=y."average"
group by x."class",x."average",x."name"
) as t
where t.num<=3
order by t."class",t.num
;
種類:アドバイス
どんな人:一般人
自信:自信あり
回答日時:06/07/20 05:33
回答番号:No.1
この回答へのお礼chukenkenkouさんありがとうございます。
バッチリです!
x."average"<=y."average" の部分、勉強になりました。ありがとうございました。