我有一张名为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
之后,我得到了这个结果。
所以,我需要在同一天将这些不同的百分比相加。
例如, 如果在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
但是,我得到了错误的结果,
我认为(count(DATE(date)))
无效。我尝试用(count(DATE(date)))
计算每天有多少问题,但我不确定为什么它不起作用。
但现在,它仅显示7200.0
。我已经划分了7200/(count(DATE(date)))
。但我不知道为什么它不起作用。
答案 0 :(得分:3)
您的查询中有一些不必要的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`)
);
<强>查询:强>
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")
一些示例数据:
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');
表tbl_answer
如何使用这些数据:
<强>输出:强>
输出说明: