我有以下mysql表(测试,问题)和相应的列类型。问题表的字段correct_answer可以包含等于“是”或“否”的值。当它为“是”时,它被认为是正确的。当它为“否”时,它被视为不正确。表测试中的字段正确和不正确包含这些计数的总和。我想要一个单独的sql命令,它根据问题表中的值更新测试表。记录最初插入测试表中,计数设置为0,同时表格问题逐步填充。
测试(test_id整数主键,正确的整数,不正确的整数)
问题(test_id整数外键,问题varchar(35),correct_answer varchar(3))
测试数据
tests
10,0,0
11,0,0
questions
10,'textbook','yes'
10,'fire','no'
10,'card','yes'
11,'lamp','yes'
运行sql命令后,tests表必须显示为:
10,2,1
11,1,0
我试过“更新测试设置正确=选择计数(test_id)来自哪些问题,其中correct_answer ='oui',不正确=选择计数(test_id)来自哪些问题,其中correct_answer ='non'”但不起作用
答案 0 :(得分:0)
您可以在子查询中进行聚合,并使用tests
表进行连接以更新总计数
update tests t
join ( select test_id,
sum(correct_answer='yes') as correctCount,
sum(correct_answer='no') as incorrectCount
from questions
group by test_id) aggr
on t.test_id = aggr.test_id
set t.correct = aggr.correctCount,
t.incorrect = aggr.incorrectCount
答案 1 :(得分:0)
试试这个。
UPDATE tests
SET
tests.correct = (
SELECT count(*) FROM questions WHERE tests.test_id = questions.test_id AND questions.correct_answer = 'yes' GROUP BY test_id
),
tests.incorrect = (
SELECT count(*) FROM questions WHERE tests.test_id = questions.test_id AND questions.correct_answer = 'no' GROUP BY test_id
)