GROUP BY 中相同结果的 COUNT 个空值(SQL 服务器)

COUNT Nulls in GROUP BY in same result (SQL Server)

我对如何计算查询中的 Null 值有点困惑。

我有一个基本的 table,每个类别的调用次数为 phone。我目前正在计算收到有关此类类别的电话的次数:

SELECT COUNT (Calls) AS Calls, Category
FROM dbo.Calls
GROUP BY Category

这很好用,并给我一个显示每个类别的调用总数的输出。但是,某些类别没有电话。这些未显示,因为 COUNT 不计算 Null 值。

考虑到这一点,我怎样才能得到一个输出,既计算对每个类别的所有调用并且在没有任何调用的每个类别旁边显示 0?

Internet 上的一些示例表明,当涉及两个 table 并执行 OUTER JOIN 时,这是可能的。但是,如果我只有一个 table - 我可以在这里做什么?

未在 dbo.Calls

中表示的类别计数

为此,您需要一个必须始终出现在结果中的类别列表...然后您需要在这些类别和您的调用之间执行 left join

你有分类吗table?如果是:

select
 cat.Category
,count(c.Category)
from dbo.Categories as cat
    left join dbo.Calls as c
    on c.Category = cat.Category
group by cat.Category

这里有一个SQL Fiddle

如果不是,您可以明确列出类别值(假设它们是字符串):

select
 cat.Category 
,count(c.Category) as Calls
from (values
   ('Bat-Phone')      
  ,('Domestic')
  ,('International')
) cat(Category)
  left join dbo.Calls as c
  on c.Category = cat.Category 
group by cat.Category

这是另一个SQL Fiddle

未分类电话的计数

如果您只想查看未分类的调用,请使用 coalesce() or isnull() 为空值提供虚拟类别,如下所示:

select
 isnull(c.Category, 'Uncategorized') as Category
,count(*)
from Calls as c
group by isnull(c.Category, 'Uncategorized')

还有一个SQL Fiddle

这样不行吗,还是我漏掉了什么?

SELECT SUM(CASE WHEN Calls IS NOT NULL THEN 1 ELSE 0 END) AS Calls, Category
FROM dbo.Calls
GROUP BY Category