【问题标题】:How to count NULL in COUNT(column) query?如何在 COUNT(column) 查询中计算 NULL?
【发布时间】:2021-12-30 21:29:12
【问题描述】:

我有下表,我正在尝试查找每个唯一 name 元素的总数。问题是,other: 1other: Null 应该是不同的元素,但我的查询是将它们组合在一起。我遇到的问题是null 没有被算作一行。但是当我使用count(*)时,other: 1other: Null被组合在一起了。

Name id GroupId
Other 1 8
Other Null 8
Facebook 2 8
Google 3 8
Facebook 2 8

目标是返回:

[{Other: 1}, {Other: 1}, {Facebook: 2}, {Google: 1}]

我试过了:

SELECT name, count(id) 
FROM table 
WHERE id IS NOT NULL 
AND groupId='${id}' 
GROUP BY name 
UNION 
SELECT name, count(*) 
FROM table 
WHERE id IS NULL 
AND groupId ='${id}' 
GROUP BY name

还有:

SELECT name, count(id)
FROM table
WHERE id='${id}' 
GROUP BY name

我怎样才能得到上面想要的返回值?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您似乎希望每个名称和 ID 有一个结果行,因此不要仅按名称分组,而是按名称和 ID 分组:

    SELECT name, COUNT(*) 
    FROM table 
    WHERE groupId = '${id}' 
    GROUP BY name, id
    ORDER BY name, id;
    

    由于您不想在结果中显示 ID,因此请从 select 子句中省略它。

    【讨论】:

      【解决方案2】:

      您没有按 Id 分组

      我认为你需要的是

      SELECT name, count(*)
      FROM table
      WHERE Groupid='${id}' 
      GROUP BY name, Id
      

      【讨论】:

        【解决方案3】:

        使用检查id 是否为null 的标志列进行分组:

        SELECT name, 
               id IS NULL null_flag, 
               COUNT(*) count 
        FROM tablename 
        WHERE groupId = '${id}'  
        GROUP BY name, null_flag;
        

        或者,如果您不希望它出现在结果中:

        SELECT name, COUNT(*) count 
        FROM tablename 
        WHERE groupId = '${id}'  
        GROUP BY name, id IS NULL; 
        

        请参阅demo

        【讨论】:

          猜你喜欢
          • 2021-09-15
          • 2021-02-02
          • 1970-01-01
          • 2015-10-22
          • 2018-05-21
          • 2014-04-28
          • 2021-06-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多