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

时间:2014-02-24 06:40:04

标签: sql tsql

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

查询类型示例:

Select Group, Count([Group]) 
From [Data] 
Group by [Group]

似乎 count(*)和 count(Group)都会导致空组显示0

预期表格数据的示例:

Id, Group
---------
1 , Alpha
2 , Null
3 , Beta
4 , Null

预期结果的示例:

Group, Count
---------
Alpha, 1
Beta,  1
Null,  0

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

Group, Count
---------
Alpha, 1
Beta,  1
Null,  2

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

4 个答案:

答案 0 :(得分:4)

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

*将确保计算每一行。

Select Group, Count(*) 
From [Data] 
Group by [Group]

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

答案 1 :(得分:0)

只做

SELECT [group], count([group])
GROUP BY [group]

SQL Fiddle Demo

Count(id)没有给出所讨论的预期结果。为组NULL提供值2

答案 2 :(得分:-1)

COUNT(*)应该有效:

SELECT Grp,COUNT(*)
FROM tab
GROUP BY Grp

还可以采取以下解决方案:

SELECT Grp, COUNT(COALESCE(Grp, ' '))
FROM tab
GROUP BY Grp

以下是SQL Fiddle

的代码

答案 3 :(得分:-1)

试试这个..

Select Group, Count(isNull(Group,0)) 
From [Data] 
Group by [Group]