SQL 服务器分组有些奇怪

Something strange with SQL Server grouping

我有一个关于 group by 的问题。

例如:

select COUNT(*)
from 
    (select 0 c1) t1
where 0 = 1
group by t1.c1

结果 - 无记录

select COUNT(*)
from  
    (select 0 c1) t1
where 0 = 1
--group by t1.c1

结果 - 0

为什么?!?!

当您过滤 WHERE 0 = 1 时,没有行与过滤器匹配。

当您也不添加 group by 语句时,table 中的所有行都将被视为 1 组。因此结果计数将为 0 - 对于该组,有 0 行与过滤器匹配。

添加分组列时,SQL 服务器必须进行相同的计数,但现在按该列的每个不同值进行分组。由于您的过滤器没有 return 分组列的任何值,因此没有要进行的分组。所以结果是没有记录。

所以两者之间的区别是0组vs 1组。无结果对结果

没有 GROUP BY always returns 行的聚合查询。过滤掉所有行后,该行上的大多数值为 NULL。例外情况是 COUNT() 值,即 0.

一个聚合查询,每个值组合有 GROUP BY returns 一行。过滤掉所有行后,没有组,因此不会返回任何内容。

您的第一个查询有 GROUP BY 但过滤掉了所有行。因此,没有行。第二个查询没有GROUP BY,所以返回一行。