2016-09-26 1 views
-1

J'ai une instruction select mysql qui fonctionne très bien:Essayer de travailler% MYSQL, les déclarations Seperate fonctionnent ok

SELECT advisor AS advisor, team,   
SUM(time) - SUM(CASE WHEN `queue` like '%Oth%' THEN time END) as case_time, 
Count(distinct date) * 450 - SUM(CASE WHEN `queue` like '%Oth%' THEN time END) as time_av 
FROM shift_report 
WHERE `team` = 1 and `date`>'20160701' group by `advisor` order by `advisor` ASC 

Je veux diviser case_time par time_av et * 100 pour obtenir le pourcentage de « actual_time »

J'ai essayé, mais cela n'a pas fonctionné:

round(SUM(time) - SUM(CASE WHEN `queue` like '%Oth%' THEN time END)/
Count(distinct date) * 450 - SUM(CASE WHEN `queue` like '%Oth%' THEN time END) * 100, 2) 

Toutes les idées ??

+0

cela n'a pas fonctionné signifie qu'il donne une erreur ou ne montre rien ?. Pouvez-vous fournir ci-dessus résultat de l'échantillon SQL? –

+0

Si je divise manuellement le résultat de case_time par le résultat de time_av et * par 100, j'obtiens la réponse dont j'ai besoin. – djd

+0

Veuillez essayer de remplacer Count (date distincte) avec (Sélectionnez count (date distincte) de shift_report comme si s.advisor = shift_report.advisor) comme total_count –

Répondre

0

Cela a fonctionné:

ronde ((SUM (temps) - SOMME (CASE WHEN file d'attente comme '% Oth%' END temps THEN))/(Count (date distincte) * 450 - SUM (CAS QUAND file d'attente comme '% Oth%' ALORS time END)) * 100, 2) comme résultat

0

Je pense que vous avez manqué la parenthèse. SQL modifié s'il vous plaît exécuter et voir.

select round((SUM(time) - SUM(CASE WHEN queue like '%Oth%' THEN time END))/ 
(Count(distinct date) * 450 - SUM(CASE WHEN queue like '%Oth%' THEN time END) * 
100), 2) as result FROM shift_report WHERE team = 1 and date>'20160701' 
+0

J'ai couru ceci et obtenir l'erreur 1241: L'opérande devrait contenir 1 colonne – djd

+0

Même résultat encore, la requête ne s'exécute pas et donne l'erreur 1241. Si je sépare les requêtes, c'est-à-dire, case_time et time_av, elles donnent toutes les deux des résultats corrects. Il ne renvoie que des valeurs incorrectes lorsque j'ai essayé de diviser case_time par time_av – djd

+0

désolé, j'ai modifié ma réponse. pouvez-vous exécuter à nouveau –