2017-06-22 1 views
1

J'ai la tabletaux de réussite de calcul de MySQL basé sur la colonne des valeurs

t1

cela indique si les travaux sont faits par l'utilisateur

terminé -> utilisateur a terminé avec succès le travail

donné -> employeur attribué le travail à l'utilisateur, mais le travail n'est pas encore fait

estopped -> il y a quelques pr oblème, de sorte que l'employeur a annulé le contrat

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 

Maintenant, je veux calculer le taux de réussite,

((nombre total de produits finis par l'utilisateur 4)/ ((nombre total de produits finis par l'utilisateur 4) + (nombre total de forclos par l'utilisateur 4))) * 100

Je ne pas comment implémenter dans MySQL ...

+0

Pourquoi il y a deux fois id travail 7 et 9? Est-ce une faute de frappe? –

+0

@Fahad Anjum désolé frère j'ai mis à jour ma question –

+0

Vous pouvez le voir. https://stackoverflow.com/questions/44478688/count-multiple-types-of-same-column/44478842#44478842 –

Répondre

2

Essayez ci-dessous requête:

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; 

Si vous voulez des enregistrements pour tous les utilisateurs, supprimez simplement la condition where userid = 4 de la requête.

1

Vous pouvez utiliser la solution suivante:

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

votre requête fonctionne également ... mais vous devez changer DIV avec / –