计算每天的正确百分比

Clo*_*oud 4 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
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)))。但我不知道为什么它不起作用。

100*_*111 5

您的查询中有一些不必要的内容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看起来如何:

在此输入图像描述

输出:

在此输入图像描述

输出解释:

  • 2016-02-08日期共有 7 条条目,其中 3 条是正确的。(3/7 = 42.86)
  • 2016-02-02日期共有 4 条记录,其中 1 条是正确的。(1/4 = 25.00)
  • 2016-02-07日期共有 3 条记录,其中 1 条是正确的。(1/3 = 33.33)