我有一张这样的表:
CREATE TABLE IF NOT EXISTS `answered` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`question_id` int(11) NOT NULL,
`correct` tinyint(1) NOT NULL DEFAULT '0',
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
和
CREATE TABLE IF NOT EXISTS `questions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`created` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
我需要选择正确和错误答案的计数,但是:如果相同的问题得到多个答案(可能有更多的条目在“回答”中具有相同的question_id)只有最新的(由“确定”答案。创建“)应计数。
结果结构应该是:
correct count
0 1
1 3
小提琴: http://sqlfiddle.com/#!2/11073
我的试用版:
SELECT a.correct, count(*) as count
FROM answered a
JOIN questions q ON a.question_id = q.id
GROUP BY correct
这有效,但不止一次计算相同的question_ids。
答案 0 :(得分:0)
试试这个:
SELECT Correct, count(*) as count
FROM questions q
JOIN (select question_id, max(created) as 'MaxCreated' from answered group by question_id) a
ON a.question_id = q.id
JOIN answered t1 on a.question_id = t1.question_id and a.MaxCreated = t1.Created
GROUP BY correct
可能有更好的选择(我不喜欢按日期加入,如果日期重复怎么办?)但我认为它会给你你想要的东西(我的意思是,如果你想要最大日期,你不应该'重复日期)
答案 1 :(得分:-1)
我认为没有光标就没有办法做到这一点,因为如果它有零个或多个答案,你想评估每个问题,如果它有多个答案,你想得到最新的答案,表示您希望在每个Question_id上进行交互。
查看此代码: http://dev.mysql.com/doc/refman/5.0/en/cursors.html
对于每个问题ID,您检查最新答案是否正确,而不是添加正确和错误的变量。