【问题标题】:How to query count() with different grouping from same table?如何从同一张表中查询具有不同分组的count()?
【发布时间】:2021-09-11 16:29:06
【问题描述】:

我有下表:

CREATE TABLE COST1 (
    REGION,
    IS_SERVICED,
)

IS_SERVICED 为真或假。地区不是唯一的。我想返回一个包含 3 列的数据集;地区,COUNT_TRUE,COUNT_FALSE。如果我需要放置位置/有条件来识别其中一个,我如何编写一个查询来生成按区域分组的真假计数。
我可以使用多个 CTE 执行此操作,如下所示:

WITH TRUE_COUNT_TABLE (REGION, TRUE_COUNT) AS
(SELECT REGION, count(*) FROM TABLE1
WHERE IS_SERVICED like 'TRUE'
GROUP BY REGION),
FALSE_COUNT_TABLE (REGION, FALSE_COUNT) AS
(SELECT REGION, count(*) FROM TABLE1
WHERE IS_SERVICED like 'FALSE'
GROUP BY REGION)

SELECT REGION, TRUE_COUNT, FALSE_COUNT FROM TRUE_TABLE t JOIN FALSE_TABLE f
ON t.REGION = f.REGION;

有没有办法在单个查询中做到这一点? (另外,我使用WHERE是正确的,还是应该在这里使用HAVING?)

【问题讨论】:

    标签: sql count


    【解决方案1】:

    只需将SUM 与条件一起使用

    SELECT 
      REGION
      ,SUM(CASE WHEN IS_SERVICED = 'TRUE' then 1 else 0 END) as TRUE_COUNT
      ,SUM(CASE WHEN IS_SERVICED = 'FALSE' then 1 else 0 END) as FALSE_COUNT 
    FROM TABLE1
    GROUP BY REGION
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2011-09-03
      • 2018-03-26
      • 1970-01-01
      • 2016-10-12
      • 2012-12-14
      • 1970-01-01
      相关资源
      最近更新 更多