MySQL基于列值计算成功率

MySQL基于列值计算成功率,mysql,Mysql,我有桌子 t1 这说明作业是否由用户完成 已完成->用户已成功完成作业 给定->雇主已将工作分配给用户,但工作尚未完成 有一些问题,所以雇主取消了合同 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 finishe

我有桌子

t1

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

已完成->用户已成功完成作业

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

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

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中实现这一点…

请尝试以下查询:


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

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

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

为什么有两个作业id 7和9?这是打字错误吗?@Fahad Anjum抱歉,兄弟,我已经更新了我的问题,你可以看到这个。你的查询也可以。。。但是需要用/
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