2

我有一张这样的桌子:

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 的条目)只有最新的(由“answered.created”确定)才算。

结果结构应该是这样的:

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。

4

2 回答 2

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

可能有更好的选择(我不喜欢按日期加入,如果日期重复怎么办?)但我认为它会给你你想要的(我的意思是,如果你想要最大日期,你不应该重复日期)

于 2012-07-24T12:36:56.437 回答
-1

我相信没有光标就没有办法做到这一点,因为您想评估每个问题是否有零个或多个答案,如果它确实有多个答案,您希望获得最新的答案,这意味着您想要在每个 Question_id 上进行交互。

查看此代码: http ://dev.mysql.com/doc/refman/5.0/en/cursors.html

对于每个问题,您检查最新答案是否正确,然后添加正确和错误变量。

于 2012-07-24T10:52:12.347 回答