【问题标题】:Something strange with SQL Server groupingSQL Server 分组有些奇怪
【发布时间】:2020-10-30 23:36:43
【问题描述】:

我有一个关于 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

为什么?!?!

【问题讨论】:

    标签: sql sql-server-2008 group-by


    【解决方案1】:

    没有GROUP BY的聚合查询总是返回一行。过滤掉所有行后,该行上的大多数值为NULL。例外是 COUNT() 的值是 0

    带有GROUP BY 的聚合查询为每个值组合返回一行。过滤掉所有行后,没有分组,所以什么也没有返回。

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

    【讨论】:

      【解决方案2】:

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

      如果您也没有添加 group by 语句,则该表中的所有行都将被视为 1 个组。所以结果计数将为 0 - 对于该组,有 0 行与过滤器匹配。

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

      所以两者的区别是 0 组 vs 1 组。没有结果与结果。

      【讨论】:

        猜你喜欢
        • 2019-01-08
        • 1970-01-01
        • 2013-06-26
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多