2

「PENDING」、「SENT INFO」、「PTP」など、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

クエリに問題があると思いますが、わかりません。助けてください。

4

3 に答える 3

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.」がある場合 でDBに記録.

于 2013-07-08T06:50:47.627 に答える
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;
于 2013-07-08T06:57:16.017 に答える
0

これは mysql であるため、次のように簡単に実行できます。

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

これは、mysql では true が 1 で false が 0 であるため機能するため、条件を合計すると true の回数がカウントされます。

于 2013-07-08T07:37:08.950 に答える