2016-11-30 4 views
0

Ich habe Schwierigkeiten, die Prozent auf dem gleichen Tisch zu bekommen.Die Prozent in der gleichen Tabelle

Ich möchte die Erfolgsquote pro Untergruppe erhalten. Erfolg/Gesamt Transaktion * 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 

Erwartete Ergebnisse:

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

Antwort

1

Verwendung bedingte Aggregation:

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

Dies verwendet die MySQL Stenografie, die Boolesche Ausdrücke als ganze Zahlen in einem numerischen Kontext behandelt, mit "1" für wahr und "0" für falsch. Daher berechnet avg() den Prozentsatz der Erfolge unter den Zeilen in jeder Gruppe.

+1

Das ist eine sehr einfache und saubere Lösung, schön. – sagi

+0

Danke funktioniert perfekt! – NaD

0

Verwenden Sie eine group by Abfrage wie

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

wählen SUB_GROUP, Summe (Fall STATUS, wenn 'Erfolg' dann 1 sonst 0 Ende) als Gesamt, (sum (Fall STATUS, wenn 'Erfolg' dann 1 sonst 0 end) * 100/COUNT (*)) + '%' als Success_Rate aus Tab.1

Gruppe von SUB_GROUP

0

select SUB_GROUP, sum (if (STATUS = 'Erfolg', 1, 0)) als insgesamt, (sum (if (STATUS = 'Erfolg', 1, 0)) 100/count ()) + '%' als Success_Rate aus Tab Gruppe von SUB_GROUP

Verwandte Themen