2017-01-09 6 views
0

До сих пор у меня этот рабочий запрос, который суммирует количество проверок, сгруппированных по серийному номеру, а затем вычитает сумму тех, которые прошли проверку («P»). Если число проходов равно число проверок, то это считается общим проходом и мы присваиваем значение 1 в противном случае 0.Сумма MySQL оператора IF

SELECT IF(SUM(CASE 
      WHEN i.inspect_result IN ('P','F') THEN 1 
      ELSE 0 
      END) - 

     SUM(CASE 
      WHEN i.inspect_result ='P' THEN 1 
      ELSE 0 
      END)=0,1,0) as Results 

FROM inspections i WHERE workorder_id=5 GROUP BY serial_no 

Это дает результат, как так

------------- 
Results 
------------- 
1 
0 
1 
1 
0 
0 
1 
1 
1 
0 
etc. 

Что я хочу сделать это SUM Результаты. Я попытался инкапсулировать весь запрос SELECT SUM (существующий запрос), но он не может заставить это работать.

ответ

0

Вы можете попробовать следующий запрос:

SELECT SUM(Results) 
FROM (
SELECT IF(SUM(CASE 
      WHEN i.inspect_result IN ('P','F') THEN 1 
      ELSE 0 
      END) - 

     SUM(CASE 
      WHEN i.inspect_result ='P' THEN 1 
      ELSE 0 
      END)=0,1,0) as Results 

FROM inspections i WHERE workorder_id=5 GROUP BY serial_no 
) a 

Вот простой SQL Fiddle.

+0

Работал как очарование - большое спасибо! – xarga