-1

どのユーザーがすべてのテストに合格したかを調べる必要がある SQL クエリの問題があります。ここにテーブルがあります:

例: nameoftable(nameofcolumns)

ユーザー(ユーザーID、パスワード)

テスト (テスト番号、creditpertrue、negperfalse、合計、neededcredit)

{creditpertrue=正しい答えごとに与えられるポイントおよびnegperfalse =間違った答えごとに得られるポイントおよび合計=はテストの合計ポイントであり、needcreditはテストに合格するためのポイント}

質問(テスト#,q#,truechoice#)

user_test(ユーザーID,テスト#)

{この表は、どのユーザーがどのテストを受験したかを示しています (ユーザーは 1 回だけテストを受けることができます)}

user_test_question(uesrid,test#,q#,userchoice#) {この表は、すべてのテストと質問番号でのすべてのユーザーの選択を示しています。間違っているか正しいか}

今問題はこれです: find out the userid of users that have passed all of the tests.

私の頭に浮かんだ解決策はこれでした:

次のような 2 つのビューを作成します: view1:userid,test#,numberofrightchoices

view2:userid,test#,numberofwrongchoices

次に、これらの 2 つのビューで選択を使用し、numberofrightchoices*creditpertrue-numberofwrongchoices*negperfalse>=neededcredit を使用します

出来ますか?

4

1 に答える 1

0

すべてのテストに合格したユーザーのリストを取得するために必要なクエリは次のようになると思います。

select userid,
from user_test
where userid not in (
    Select 
        userid
    from    
        (select t0.test#,t2.uesrid, neededcredit,
            Sum(case when t1.truechoice# = userchoice# then t0.creditpertrue else -negperfalse end) as User_Test_Points
        from test t0 left join   
            question t1 on (t0.test# = t1.test#) left join
                user_test_question t2 on (t1.q# = t2.q#)
        where t2.uesrid is not null
        Group by t0.test#,t2.uesrid,neededcredit )
    Where Test_Results.User_Test_Points < Test_Results.neededcredit ) 
于 2012-12-15T10:33:49.653 に答える