组更新 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
)
我有以下 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
)