计算每一天的正确百分比

时间:2016-02-08 07:23:14

标签: mysql

我有一张名为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 

之后,我得到了这个结果。

result

所以,我需要在同一天将这些不同的百分比相加。

例如, 如果在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

但是,我得到了错误的结果,

result

我认为(count(DATE(date)))无效。我尝试用(count(DATE(date)))计算每天有多少问题,但我不确定为什么它不起作用。

但现在,它仅显示7200.0。我已经划分了7200/(count(DATE(date)))。但我不知道为什么它不起作用。

1 个答案:

答案 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如何使用这些数据:

enter image description here

<强>输出:

enter image description here

输出说明:

  • 2016-02-08 共有7个条目的日期中有3个是正确的。 (3/7 = 42.86)
  • 2016-02-02 共有4个条目,1个中的日期是正确的。 (1/4 = 25.00)
  • 2016-02-07 共有3个参赛作品中的日期是正确的。 (1/3 = 33.33)