-1

有一个 sql 查询问题,我应该找出哪些用户通过了所有测试。以下是表格:

例如:名称表(列名称)

用户(用户名,密码)

测试(测试#,creditpertrue,negperfalse,total,neededcredit)

{creditpertrue=每个正确答案的分数,negperfalse=每个错误答案的分数,total=是测试的总分,needcredit 是通过测试的分数}

问题(测试#,q#,truechoice#)

user_test(userid,test#)

{此表显示哪个用户参加了哪个测试(一个用户只能参加一次测试)}

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

然后在这两个视图上使用选择并使用 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 回答