2012-03-12 15 views
0

私は、カウント機能を使用して試験のスコアを私に与えるテーブルを持っています。私は、test1とtest2を比較するために同じ関数を実行する必要があります。sqlが2つのテーブルを比較しています

私はカウント機能を使用する最初の試験のスコアを見つけて、where句にいくつかの制約を追加行い、以降のユーザー名でグループ化するために、

私がする必要があるだろう秒カウントし、このカウントを比較する必要があります2番目のselectステートメントにありますが、having節にselectステートメントを追加することはできません。where節のcountには何も操作できません。以下は、私が今持っているもの

SELECT ur.uno, COUNT(*)*5 as test1 
FROM question q, 
     userresponse ur 
WHERE q.eno = '1' 
    AND q.eno = ur.eno 
    AND q.qno = ur.qno 
    AND q.correctanswer = ur.response 
    AND test1 > (SELECT ur.uno, COUNT(*)*5 
       FROM question q1, 
         userresponse ur1 
       WHERE q1.eno = '3' 
        AND q1.eno = ur1.eno 
        AND q1.qno = ur1.qno 
        AND q1.correctanswer = ur1.response 
      GROUP BY ur.no) 
GROUP BY ur.uno 

の基本的な考え方である私はtest1の無効な識別子を取得するしかしこれは私の最初のアプローチです。私の他のアプローチは

select ur.uno, count(*)*5 as test1 
from question q, userresponse ur 
where q.eno = '1' and q.eno = ur.eno and q.qno = ur.qno and q.correctanswer = ur.response 
group by ur.uno 
having count(*)*5 > (select ur1.uno, count(*)*5 as test3 
from question q1, userresponse ur1 
where q1.eno = '3' and q1.eno = ur1.eno and q1.qno = ur.qno and q.correctanswer = ur.response 
group by ur1.uno) 

だろうが、私はあまりにも多くの値の誤り、任意のアイデアを得ますか?あなたがTEST1を置き換えることができように、句は別名を認識しない

答えて

1

試してみてください。

SELECT ur.uno, 
     COUNT(case when q.eno='1' then 1 end)*5 as test1, 
     COUNT(case when q.eno='3' then 1 end)*5 as test3 
FROM question q, 
     userresponse ur 
WHERE q.eno in ('1', '3') 
    AND q.eno = ur.eno 
    AND q.qno = ur.qno 
    AND q.correctanswer = ur.response 
HAVING COUNT(case when q.eno='1' then 1 end) > 
     COUNT(case when q.eno='3' then 1 end) 
0
最初のクエリで

2番目のクエリで

あなたはあまりにも多くの値のエラーを回避するために、第2のSELECT文で

select count(*)*5 as test3 

select ur1.uno, count(*)*5 as test3 

を変更することができます。

1

@ user541597; ちょっと..私はそれが動作すると思い内部クエリから「ur.uno」を削除

関連する問題