MySQL根据列值计算成功率

时间:2017-06-22 07:49:24

标签: mysql

我有桌子

t1

这表明作业是否由用户完成

完成 - >用户成功完成了工作

给出 - >雇主将工作分配给用户,但工作尚未完成

estopped - >有一些问题,所以雇主取消了合同

id userid jobid  status
1    4      6    finished
2    4      7    given
3    4      8    estopped
4    4      9    finished
2    4      10    given
3    4      11    finished
4    4      12    finished

现在我想计算成功率,

((用户4完成的总数)/ ((用户4完成的总数)+(用户4的总数)))* 100

我不知道如何在MySQL中实现这个......

2 个答案:

答案 0 :(得分:2)

尝试以下查询:

select userid,
( ( sum(case when status='finished' then 1 else 0 end) * 100 ) /
  ( sum(case when status='finished' then 1 else 0 end) + sum(case when status='estopped' then 1 else 0 end) )
) success_rate
from t1
where userid = 4
group by userid;

如果您想要所有用户的记录,只需从查询中删除条件 - where userid = 4

答案 1 :(得分:1)

您可以使用以下解决方案:

SELECT ((c_finished / (c_finished + c_estopped)) * 100) AS success_rate
FROM (
    SELECT 
        userid,
        SUM(CASE WHEN status = 'finished' THEN 1 ELSE 0 END) AS c_finished,
        SUM(CASE WHEN status = 'given' THEN 1 ELSE 0 END) AS c_given,
        SUM(CASE WHEN status = 'estopped' THEN 1 ELSE 0 END) AS c_estopped
    FROM t1
    GROUP BY userid
)x WHERE x.userid = 4