Table : ExamResult
Columns : ClassNo, StudentNo, Name, Score
SELECT *
FROM ExamResult r1
WHERE (
SELECT count(*)
FROM ExamResult r2
WHERE r1.Score < r2.Score and r1.classNo = r2.classNo
) < N
order by classNo, Score desc
分析 :
列出在相同班級裡面,分數比自己大的人, 小於N人
Ex : N=1, 列出各班第1名的
PS. 為何不使用 = (N-1) ,
例如 (N-1)=0時, 沒有人分數比我高
(N-1)=1時, 只有一個人分數比我高
VS. N=1, 分數比我高的人少於1人
N=2, 分數比我高的少於2人
如果有一個班級 分數排列是 100, 100, 100, 90, 90.
其subquery的結果會是0
使用等於0的 會列出 100, 100, 100
1的 會列出 (什麼都沒有, 因為還是0)
使用小於1 會列出 100, 100, 100
2 會列出 100, 100, 100
=> 使用<才是正解
文章標籤
全站熱搜
留言列表