group update mysql命令

时间:2015-01-01 19:46:26

标签: mysql sql

我有以下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'”但不起作用

2 个答案:

答案 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
)