2014-02-22 3 views
-1

나는 저에게 잘못된 결과를주는 쿼리를 가지고 있습니다. 여기에 내 쿼리가 있습니다.mysql의 더 많은 필드에 대한 SUM

SELECT sum(open1) open1, sum(closed1) closed,sum(pending1) NotSpecified, 
     status,type,sub_status,created_date,bystatus,lst_type 
FROM ( 
    SELECT agent_1_id,status,type,sub_status,created_date,'Open' as bystatus, 
     (CASE WHEN type = 1 THEN 'Rent' 
       WHEN type = 2 THEN 'Sale' 
      ELSE 'Not Specified' END) as lst_type, 
     count(*) as open1, 0 closed1, 0 pending1 
    FROM crm_mydeals 
    where status = 1 AND agent_1_id>0 and is_active=1 
    GROUP BY status 
    UNION ALL 
    SELECT agent_1_id,status,type,sub_status,created_date,'Closed' as bystatus, 
     (CASE WHEN type = 1 THEN 'Rent' 
       WHEN type = 2 THEN 'Sale' 
      ELSE 'Not Specified' END) as lst_type, 
     0 open1, count(*) as closed1, 0 pending1 
    FROM crm_mydeals 
    where status = 2 AND agent_1_id>0 and is_active=1 
    GROUP BY status 
    UNION ALL 
    SELECT agent_1_id,status,type,sub_status,created_date,'NotSpecified' as bystatus, 
     (CASE WHEN type = 1 THEN 'Rent' 
       WHEN type = 2 THEN 'Sale' 
      ELSE 'Not Specified' END) as lst_type, 
     0 open1, 0 closed1, count(*) as pending1 
    FROM crm_mydeals 
    where status = 3 AND agent_1_id>0 and is_active=1 
    GROUP BY status 
) s 
WHERE DATE(created_date) BETWEEN '2013-11-22' AND '2014-2-22' 
GROUP BY status 
+0

이 간단한 쿼리를 사용하면 결과가 무엇인지 추측하기가 매우 어렵습니다. 문제를 "잘못된 결과"보다 훨씬 자세히 설명해야합니다. –

+0

잘못된 결과는 합계 (open1) open1, 합계 (closed1) 닫음, 합계 (보류 중 1)을 의미합니다. NotSpecified가 올바르지 않습니다. – user3244721

답변

0

질문을 단순화하면 정확한 대답을 찾는 데 도움이 될 수 있습니까?

SELECT SUM(CASE WHEN status = 1 THEN 1 ELSE 0) AS open1, 
     SUM(CASE WHEN status = 2 THEN 1 ELSE 0) AS closed, 
     SUM(CASE WHEN Status = 3 THEN 1 ELSE 0) AS NotSpecified, 
     status, 
     type, 
     sub_status, 
     created_date, 
     (CASE WHEN status = 1 THEN 'Open' 
      WHEN status = 2 THEN 'Closed' 
      WHEN status = 3 THEN 'NotSpecified') AS bystatus, 
     (CASE WHEN type = 1 THEN 'Rent' 
      WHEN type = 2 THEN 'Sale' 
      ELSE 'Not Specified' END) as lst_type 
FROM crm_mydeals 
WHERE status IN (1,2,3) 
AND agent_1_id > 0 
AND is_active=1 
AND DATE(created_date) BETWEEN '2013-11-22' AND '2014-2-22' 
GROUP BY status, type, sub_status, created_date 
+0

You did it..thanks – user3244721