-1

私は2つのテーブルの学生を持っており、試験は次のようになります

student(studentid,lastname,firstname,class)

exam(studentid,course,mark,result)

各クラスで 90 点、100 点の最高の生徒を見つける必要があります。

これは私が必要なものです

class     studentid  best
K11       K1101       3    
K12       K1203       2
K13       K1305       2

これは私の最初のコードです

Select st.class, st.studentid, count(st.mark) as best
From exam e inner join student st on e.studentid = st.studentid
Where e.mark = 90 or e.mark = 100
Group by e.studentid

戻る

class     studentid  best
K11       K1101       3
K12       K1201       1
K12       K1203       2
K13       K1305       2

だから私は別のコードを試します

Select st.class, st.studentid, count(st.mark) as best
From exam e inner join student st on e.studentid = st.studentid
Where e.mark = 90 or e.mark = 100
Group by st.class
Having count(e.mark) = 
       (Select max(count)
        From (Select count(ex.mark) count
              From exam ex
              Where ex.mark = 90 or ex.mark = 100
              Group by ex.studentid) a) 

それでも間違った答えを得る

class     studentid  best
K11       K1101       3
K12       K1201       3

データの更新

わかりにくい質問ですみません。各クラスの学生が正確なスコア 90 または 100 の多くのコースを持っていることを確認する必要があります。これは私のデータです

テスト

studentid    course   mark result
K1101        DB       100  Pass
K1101        CD       90   Pass
K1101        DIP      95   Pass
K1101        OT       100  Pass
K1102        DB       97   Pass
K1102        CD       65   Pass
K1102        DIP      70   Pass
K1102        OT       44   Fail
K1201        DB       85   Pass
K1201        CD       90   Pass
K1201        DIP      76   Pass
K1201        OT       65   Pass
K1202        DB       69   Pass
K1202        CD       32   Fail
K1202        DIP      57   Pass
K1202        OT       96   Pass
K1203        DB       90   Pass
K1203        CD       87   Pass
K1203        DIP      90   Pass
K1203        OT       91   Pass
K1301        DB       75   Pass
K1301        CD       79   Pass
K1301        DIP      78   Pass
K1301        OT       63   Pass
K1305        DB       90   Pass
K1305        CD       93   Pass
K1305        DIP      100  Pass
K1305        OT       80   Pass

この場合、クラス K11 の生徒 K1101 には 100 のコースが 2 つ、90 のコースが 1 つあるので、3 つ数えます。

4

2 に答える 2

0

これを試して

Select   st.class, st.studentid, count(mark) as best
From exam e inner join student st on e.studentid = st.studentid
Where e.mark between 90 and 100
and e.mark in (select max(mark) from exam group by studentid)
Group by st.class 
于 2013-06-08T10:56:35.837 に答える