有一个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
有可能吗?
答案 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 )