【问题标题】:Query with multiple SELECT and GROUP BY使用多个 SELECT 和 GROUP BY 进行查询
【发布时间】:2013-07-05 10:09:33
【问题描述】:

我将统计总区域的记录,其中状态会有所不同,例如“PENDING”、“SENT INFO”、“PTP”以及分组查询和多个选择查询,但结果没有得到所以请帮助我。

我的查询是:

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

我认为查询中有问题,但我不明白。所以,请帮助我。

【问题讨论】:

  • 我认为应该是'SENT INFO' 而不是'SENT INFO.'

标签: mysql sql


【解决方案1】:
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 有“已发送信息”。使用. 记录在数据库中

【讨论】:

    【解决方案2】:
      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;
    

    【讨论】:

      【解决方案3】:

      因为这是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 的次数

      【讨论】:

        猜你喜欢
        • 2020-08-15
        • 2017-02-24
        • 1970-01-01
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 2016-09-06
        相关资源
        最近更新 更多