我有一张名为 的表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
Run Code Online (Sandbox Code Playgroud)
有很多记录。同一天,很多网友都回答了很多问题。因此,某些天的记录会以另一个不同的值重复。
现在,我想计算每天正确答案的总百分比。而且我不想表现出来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
Run Code Online (Sandbox Code Playgroud)
之后,我得到了这个结果。
因此,我需要将同一天的不同百分比相加。
例如,如果2015年11月24日回答了113个问题,而正确的问题只有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
Run Code Online (Sandbox Code Playgroud)
但是,我得到这样的错误结果,
我认为(count(DATE(date)))行不通。我尝试计算每天有多少个问题(count(DATE(date))),但我不确定为什么它不起作用。
但现在,它只显示7200.0。我已经分了7200/(count(DATE(date)))。但我不知道为什么它不起作用。
您的查询中有一些不必要的内容group by。我认为这不会产生正确的输出。所以我采用以下查询。
由于您想要正确答案的日期百分比,因此以下查询可能适合您的需求。
为了测试查询,我创建了下表:
CREATE TABLE `tbl_answer` (
`ID` int(11) NOT NULL AUTO_INCREMENT ,
`date` timestamp NULL DEFAULT NULL ,
`correct` char(3) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`ID`)
);
Run Code Online (Sandbox Code Playgroud)
询问:
SELECT
DATE_FORMAT(date,"%Y-%m-%d") `date`,
ROUND(SUM(CASE WHEN correct = 'yes' THEN 1 ELSE 0 END) / COUNT(*) * 100.0, 2) correctPercentage
FROM tbl_answer
GROUP BY DATE_FORMAT(date,"%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)
一些示例数据:
INSERT INTO `tbl_answer` VALUES ('1', '2016-02-08 00:00:00', 'yes');
INSERT INTO `tbl_answer` VALUES ('2', '2016-02-08 00:00:00', 'no');
INSERT INTO `tbl_answer` VALUES ('3', '2016-02-08 00:00:00', 'no');
INSERT INTO `tbl_answer` VALUES ('4', '2016-02-08 00:00:00', 'yes');
INSERT INTO `tbl_answer` VALUES ('5', '2016-02-08 00:00:00', 'yes');
INSERT INTO `tbl_answer` VALUES ('6', '2016-02-02 00:00:00', 'yes');
INSERT INTO `tbl_answer` VALUES ('7', '2016-02-02 00:00:00', 'no');
INSERT INTO `tbl_answer` VALUES ('8', '2016-02-02 00:00:00', 'no');
INSERT INTO `tbl_answer` VALUES ('9', '2016-02-02 00:00:00', 'no');
INSERT INTO `tbl_answer` VALUES ('10', '2016-02-08 00:00:00', 'no');
INSERT INTO `tbl_answer` VALUES ('11', '2016-02-08 00:00:00', 'no');
INSERT INTO `tbl_answer` VALUES ('12', '2016-02-07 00:00:00', 'no');
INSERT INTO `tbl_answer` VALUES ('13', '2016-02-07 00:00:00', 'yes');
INSERT INTO `tbl_answer` VALUES ('14', '2016-02-07 00:00:00', 'no');
Run Code Online (Sandbox Code Playgroud)
包含这些数据的表格tbl_answer看起来如何:
输出:
输出解释:
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |