选择最后5行的总和

时间:2013-09-21 12:22:53

标签: mysql

我正在用PHP / MySQL构建一个小测验游戏。在提问之后我想要一个屏幕来显示最后一轮中有多少被正确回答。

我在以下表中存储它们是否被正确回答:

rowID | questionid | playerid | answercorrect |
1     | 1          | 1        | 1             |
2     | 2          | 1        | 1             |
3     | 3          | 1        | 1             |
4     | 4          | 1        | 1             |
5     | 5          | 1        | 0             |
6     | 6          | 1        | 1             |
7     | 7          | 1        | 1             |

我想看看有多少最后的x(通常是5个)问题得到了正确回答。

我认为这很简单。我正在尝试这个:

SELECT sum( answercorrect ) FROM `answersgiven` ORDER BY id DESC LIMIT 5 

我认为这会将最后5行的answercorrect列相加,给我一个4的答案,但它给了我7,这是所有行的结果。

我觉得我错过了一些明显的东西。这似乎是一件简单的事情。

有什么想法吗?

3 个答案:

答案 0 :(得分:12)

试试这个:

SELECT sum(answercorrect) 
FROM (SELECT answercorrect FROM `answersgiven` ORDER BY rowID DESC LIMIT 5) t1

Example Fiddle

在您的查询中,LIMIT子句会影响整体结果:首先对所有结果进行求和(得到一行 - 所有行的总和),然后取出前5行(如果可用的话)(这又是一行)。

实现目标的最简单方法是先选择前5行(在子选择中),然后再总结。

答案 1 :(得分:2)

尝试此查询

SELECT sum(col) 
FROM (SELECT col FROM `table` ORDER BY id DESC LIMIT 5) t1

答案 2 :(得分:0)

你快到了。现在总结一下前5个答案:

SELECT SUM('top5')
FROM 
  (SELECT answercorrect AS 'top5' 
   FROM `answersgiven` 
   ORDER BY id DESC LIMIT 5) 'x'