2016-11-30 44 views
0

我很難在同一張表上獲得百分比。在同一個表中獲取百分比

我想獲得每個子組的成功率。成功/總交易* 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% 

回答

1

使用條件彙總:

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

這將使用MySQL的簡寫是把在數值上下文布爾表達式爲整數, 「1」爲真,「0」爲假。因此,avg()正在計算每個組中行中成功的百分比。

+1

這是一個非常簡單的和純溶液,漂亮的從標籤 組 '%' 作爲Success_Rate 。 – sagi

+0

非常感謝! – NaD

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 
0

選擇SUB_GROUP, 總和(殼體狀態當 '成功',則1點否則爲0結束)爲總, (總和(殼體狀態當 '成功',則1,否則0結束)* 100/COUNT(*))+通過SUB_GROUP

組從表1 '%' 作爲Success_Rate

0

選擇SUB_GROUP,SUM(IF(STATUS = '成功',1,0)),其總計, ( SUM(IF(STATUS = '成功',1,0))100 /計數())+通過SUB_GROUP