使用2个视图中的选择查询

时间:2012-12-15 10:04:03

标签: sql

有一个SQL查询问题,我应该找出哪些用户已通过所有测试。 这是表格:

ex:nameoftable(nameofcolumns)

用户(用户ID,密码)

试验(试验#,creditpertrue,negperfalse,总计neededcredit)

{creditpertrue =根据正确答案给出的分数而且非常错误=每个答案错误的分数 and total =是测试的总分,requiredcredit是通过测试的分数}

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

user_test(用户ID,试验#)

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

user_test_question(uesrid,试验#,Q#,#userchoice) {此表显示每个测试中的每个用户的选择和问题#可能是错误的或正确的}

现在的问题是: 的 find out the userid of users that have passed all of the tests.

我想到了一个解决方案:

创建2个像这样的视图: 厂景:用户ID,试验#,numberofrightchoices

视图2:用户ID,试验#,numberofwrongchoices

然后在这些2views上使用select并使用numberofrightchoices * creditpertrue-numberofwrongchoices * negperfalse> = neededcredit

有可能吗?

1 个答案:

答案 0 :(得分: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 )