2013-07-08 1 views
2

상태가 'PENDING', 'SENT INFO', 'PTP'(그룹 별, 복수 선택 검색어)와 다른 상태 인 곳의 총계 기록을 계산합니다. .복수 SELECT 및 GROUP BY 쿼리

내 쿼리는 다음과 같습니다

SELECT AREA, 
(SELECT COUNT(*) FROM prospectmaster WHERE ZONE = 'AHMEDABAD' && STATUS = 'PENDING' GROUP BY AREA) AS PENDING, 
(SELECT COUNT(*) FROM prospectmaster WHERE ZONE = 'AHMEDABAD' && STATUS = 'SENT INFO.' GROUP BY AREA) AS CNT 
FROM prospectmaster 
WHERE ZONE = 'AHMEDABAD' GROUP BY AREA 

나는 결과이 입력합니다.

AREA  PENDING INFO SENT  PTP 
AHMEDABAD 1   2    1  
GANDHINAGAR 1   5    4 
KHEDA  3   10    9 

나는 쿼리의 몇 가지 문제를 생각하지만, 제발 도와주세요 it.So을 가지고하지 않습니다.

+0

나는 '보낸 정보'가 아니라 '보낸 정보'라고 믿는다. – swapnesh

답변

5
SELECT AREA, 
     SUM(CASE WHEN STATUS = 'PENDING' THEN 1 ELSE 0 END) AS PENDING, 
     SUM(CASE WHEN STATUS = 'SENT INFO.' THEN 1 ELSE 0 END) AS cnt, 
     SUM(CASE WHEN STATUS = 'PTP' THEN 1 ELSE 0 END) AS PTP 
    FROM prospectmaster 
WHERE ZONE = 'AHMEDABAD' 
GROUP BY AREA; 

STATUS에 'SENT INFO. 이 MySQL이 때문에 .

+0

정말 고마워. – SATSANGI

1
SELECT AREA, 
     SUM(if(STATUS='PENDING',1,0)) AS PENDING, 
     SUM(if(STATUS='SENT INFO',1,0)) AS "INFO SENT", 
     SUM(if(STATUS='PTP',1,0)) AS PTP 
    FROM prospectmaster 
    WHERE ZONE = 'AHMEDABAD' 
GROUP BY AREA; 
0

와 DB에 기록, 당신은 단순히이 작업을 수행 할 수 있습니다 사실 MySQL은 그렇게 얼마나 많은 조건 수를 합산, 1과 거짓이 0이기 때문에

SELECT 
    AREA, 
    SUM(STATUS = 'PENDING') AS PENDING, 
    SUM(STATUS = 'SENT INFO.') AS SENT_INFO, 
    SUM(STATUS = 'PTP') AS PTP 
FROM prospectmaster 
WHERE ZONE = 'AHMEDABAD' 
GROUP BY AREA 

이 작동 그 진실한 시간