计算问卷的排名

时间:2018-02-09 10:07:06

标签: mysql

我正在尝试为某种调查问卷制定排名表。

每天16小时(下午4:00)提出问题,可在第二天17:59:59回答。该表必须显示参与者的位置,考虑到正确的答案是时间。

我的桌子将是那种:

+-------+---------+---------------------+
|userid | correct |      timestamp      |
+-------+---------+---------------------+
|   2   |    1    | 2018-02-07 16:00:01 |
|   1   |    1    | 2018-02-07 16:02:00 |
|   3   |    1    | 2018-02-07 17:00:00 |
|   1   |    0    | 2018-02-08 16:00:02 |
|   3   |    1    | 2018-02-08 16:00:05 |
|   2   |    0    | 2018-02-08 16:01:00 |
+-------+---------+---------------------+

现在我开始使用此查询:

SELECT `userid`, `correct `, `timestamp`, 
count(correct) as count 
FROM `results` 
WHERE correct = 1
GROUP BY `userid `
ORDER BY count DESC, timestamp DESC

但我已经意识到这不是我想要的,因为排名必须是累积的,但要考虑几天。

有没有人知道我该怎么做?

来自Stackoverflow Portugal的用户建议使用此代码,但它也无效。

SELECT userid, SUM(correct),
SUM(TIMESTAMPDIFF(HOUR,(timestamp,CAST(CONCAT_WS(' ',date(timestamp), '17:59:59') as DATETIME)))) time
FROM results
GROUP BY userid
ORDER BY correct DESC, time

1 个答案:

答案 0 :(得分:0)

请勿处理此日期时间(16h),这可能会更改,您的查询将丢失。 相反,您应该通过userid和questionnaire_id计算。为此:

  • 添加新表问卷[id,title](您可以添加额外的列 稍后:created_time,end_time,...)
  • 通过将问卷ID添加为FK来编辑您的记录表:[userid,questionnaireid,correct,timestamp]

然后正常计算:用户通过问卷

正确回答
SELECT userid, questionnaireid , 
sum(correct) as total 
FROM results r
INNER JOIN questionnaire q
ON r.questionnaireid = q.id
WHERE correct = 1
GROUP BY userid, questionnaireid
ORDER BY total DESC, id ASC