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 

=> 使用<才是正解

 

文章標籤

minglight 發表在 痞客邦 留言(0) 人氣()