null 的组计数始终为 0(零)

Dan*_*tle 1 sql t-sql

在 TSql 中,对包含空值的数据进行分组的推荐方法是什么?

查询类型示例:

Select Group, Count([Group]) 
From [Data] 
Group by [Group]
Run Code Online (Sandbox Code Playgroud)

看来count(*) 和count(Group) 都会导致显示 的空组0

预期表数据示例:

Id, Group
---------
1 , Alpha
2 , Null
3 , Beta
4 , Null
Run Code Online (Sandbox Code Playgroud)

预期结果示例:

Group, Count
---------
Alpha, 1
Beta,  1
Null,  0
Run Code Online (Sandbox Code Playgroud)

这是可以通过 count(Id) 获得的期望结果。这是获得此结果的最佳方法吗?为什么count(*) 和count(Group) 返回“不正确”的结果?

Group, Count
---------
Alpha, 1
Beta,  1
Null,  2
Run Code Online (Sandbox Code Playgroud)

编辑:我不记得为什么我认为 count(*) 这样做了,这可能是我正在寻找的答案..

Dan*_*tle 6

最好的方法是使用 count(*),其行为与 count(1) 或任何其他常量完全相同。

* 将确保每一行都被计算在内。

Select Group, Count(*) 
From [Data] 
Group by [Group]
Run Code Online (Sandbox Code Playgroud)

null在这种情况下显示而不是 2 的原因0是因为每个单元格都被计为 1 或 null,null + null = null因此该组的总数也将为 null。但是,列类型是整数,因此它显示为0