在同一个表中获得百分比

时间:2016-11-30 12:16:54

标签: mysql sql

我很难将百分比放在同一张桌子上。

我想获得每个子组的成功率。成功/总交易* 100

STATUS,  GROUP,  SUB_GROUP
success,  2004, 80007022
success, 2004, 80007022
success, 2004, 80007022
success, 2004, 80007002
error, 2004, 80007002
error, 2004, 80007002
error, 2004, 80007002
error, 2004, 80007002
error, 2004, 80007002
error, 2004, 80007002
success, 2003, 80007007
success, 2003, 80007007
success, 2003, 80007007
success, 2003, 80007007
success, 2003, 80007007
success, 2003, 80007007
success, 2003, 80007007
success, 2003, 80007007
success, 2003, 80007007
success, 2003, 80007007
error, 2003, 80007007
error, 2003, 80007007
error, 2003, 80007007

预期结果:

SUB_GROUP, Total, Success_Rate
80007022, 10, 40%
80007007, 13, 76.92%

4 个答案:

答案 0 :(得分:1)

使用条件聚合:

select sub_group, count(*),
       avg(status = 'Success') * 100
from t
group by sub_group;

这使用MySQL简写,将布尔表达式视为数字上下文中的整数,使用" 1"为真和" 0"为假。因此,avg()正在计算每组中各行之间的成功百分比。

答案 1 :(得分:0)

使用group by查询,例如

select SUB_GROUP,
sum(case when STATUS = 'success' then 1 else 0 end) as total,
count(STATUS) / sum(case when STATUS = 'success' then 1 else 0 end)* 100 as Success_Rate
from table1
group by SUB_GROUP

答案 2 :(得分:0)

选择SUB_GROUP, 总和(案例状态,当'成功',然后1,否则0结束)为总, (总和(案例STATUS'成功'然后1其他0结束)* 100 /计数(*))+'%'作为Success_Rate 来自table1

按SUB_GROUP分组

答案 3 :(得分:0)

选择SUB_GROUP,sum(if(STATUS =' success',1,0))为total,      (总和(如果(STATUS ='成功',1,0)) 100 / count())+'%'作为Success_Rate  来自标签  按SUB_GROUP分组