组更新 mysql 命令

group update mysql command

我有以下 mysql tables(tests,questions) 和相应的列类型。问题 table 的字段 correct_answer 可以包含等于 'yes' 或 'no' 的值。当为'yes'时,才算正确。当为'no'时,算作不正确。 table 测试中正确和不正确的字段包含这些计数的总和。我想要一个 sql 命令来根据问题 table 中的值更新测试 table。记录最初插入测试 table 中,计数为 0,而 table 问题逐渐填满。

tests(test_id整数主键,正确整数,错误整数)

问题(test_id整数外键,问题varchar(35),correct_answervarchar(3))

测试数据

tests
10,0,0
11,0,0

questions
10,'textbook','yes'
10,'fire','no'
10,'card','yes'
11,'lamp','yes'

运行 sql 命令后,测试 table 必须为:

10,2,1
11,1,0

我试过"update tests set correct=select count(test_id) from questions where correct_answer='oui',incorrect=select count(test_id) from questions where correct_answer='non'"但没有用

您可以在子查询中进行聚合并与 tests table 进行连接以更新总计数

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

试试这个。

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
)