【问题标题】:MySQL calculating success rate based on column valuesMySQL根据列值计算成功率
【发布时间】:2017-11-25 08:59:46
【问题描述】:

我有桌子

t1

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

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

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

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

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 中实现这个...

【问题讨论】:

标签: mysql


【解决方案1】:

试试下面的查询:

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • 您的查询也有效...但需要用 / 更改 DIV
    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多