【发布时间】:2016-02-08 07:23:14
【问题描述】:
我有一张名为tbl_answer 的表。它为每个用户每天回答问题时保存记录。
这是表格的示例。
id date correct user_id question_id
1 2015-11-17 06:13:17 yes 11 1
2 2015-11-17 06:24:54 no 1 19
3 2015-11-18 02:09:13 no 129 88
4 2015-11-18 03:16:18 yes 12 98
5 2015-11-20 04:21:24 no 117 4
5 2015-11-20 04:29:24 yes 15 9
....
....
etc
有很多记录。在同一天,许多用户回答了很多问题。因此,某天的记录会以另一个不同的值重复。
现在,我想计算每天正确答案的总百分比。而且我不想显示H:m:i。
所以,我试试这个查询,
SELECT DATE(date) as date,
( ( select COUNT(case when correct='yes' then 1 END) )*100 / (count(DATE(date))) ) as percent
FROM tbl_answer
GROUP BY date
之后,我得到了这个结果。
所以,我需要将同一天的这些不同百分比相加。
例如, 如果有 113 个问题在 2015-11-24 和 正确的问题只有 72。因此,2015-11-24 的正确率是 63.71%。
所以,我尝试这样的查询,
SELECT temp.date, SUM(temp.percent) AS total_percent
FROM ( SELECT DATE(date) as date,
( ( select COUNT(case when correct='yes' then 1 END) )*100 / ( count(DATE(date))) ) as percent
FROM tbl_answer
GROUP BY date
) AS temp
GROUP BY temp.date
但是,我得到这样的错误结果,
我认为(count(DATE(date))) 不起作用。我试着用(count(DATE(date))) 计算每天有多少问题,但我不确定为什么它不起作用。
但现在,它只显示7200.0。我已经分了7200/(count(DATE(date)))。但我不知道为什么它不起作用。
【问题讨论】:
-
为什么需要最外层的选择查询?
-
我在同一日期有相同的不同百分比。所以,我使用最外层查询来计算当天的百分比
-
如何获得相同日期的不同百分比?我可以看到您按日期分组,因此不会找到同一日期的重复记录。
-
你能试试这个查询吗?
SELECT DATE(date) as date, ROUND(AVG(CASE WHEN correct='yes' then 1 ELSE 0 END) * 100.0,2) correctPercentage FROM tbl_answer GROUP BY date -
当我按照你说的那样尝试时,我得到的百分比是第一张图片。我需要在同一天总结这些不同的百分比。我合并您的查询和我最外层的查询,结果与第二张图片相同。请帮帮我。
标签: mysql