2017-06-22 11 views
1

Ich habe den TischMySQL Berechnung Erfolgsrate auf Spalte basierend Werte

t1

dies sagt, ob die Jobs durch den Benutzer sind

beendet -> Benutzer erfolgreich beendet den Job

gegeben -> Arbeitgeber hat den Auftrag dem Benutzer zugewiesen aber die Arbeit ist noch nicht erledigt

estopped -> es gibt einige pr oblem, so dass der Arbeitgeber annullierte den Vertrag

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 

Jetzt habe ich die Erfolgsrate berechnen will,

((Gesamtzahl der fertigen durch Benutzer 4)/ ((Gesamtzahl der vom Benutzer beendet 4) + (Gesamtzahl der estopped durch Benutzer 4))) * 100

ich nicht, wie dies in MySQL zu implementieren ...

+0

Warum gibt es zwei Mal Job-ID 7 und 9? Ist das ein Tippfehler? –

+0

@Fahad Anjum sorry bro ich habe meine Frage aktualisiert –

+0

Sie können dies sehen. https://stackoverflow.com/questions/44478688/count-multiple-types-of-same-column/44478842#44478842 –

Antwort

2

Versuchen unter query:

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; 

Wenn Sie Datensätze für alle Benutzer möchten, entfernen Sie einfach die Bedingung where userid = 4 aus der Abfrage.

1

können Sie die folgende Lösung verwenden:

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 
+0

Sie Abfrage funktioniert auch ... aber müssen DIV mit ändern / –

Verwandte Themen