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