在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
编辑:我不记得为什么我认为数(*)这样做了,这可能是我正在寻找的答案..
答案 0 :(得分:4)
最好的方法是使用count(*),其行为与count(1)或任何其他常量完全相同。
*将确保计算每一行。
Select Group, Count(*)
From [Data]
Group by [Group]
null
在这种情况下显示0
而不是2的原因是因为每个单元格都被计为1或null和null + null = null
,因此该组的总数也将为空。但是,列类型是一个整数,因此它显示为0
。
答案 1 :(得分:0)
答案 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]