sql server分组有点奇怪

pprl5pva  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(339)

我有一个关于你的问题 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
为什么?

7lrncoxx

7lrncoxx1#

当你过滤时 WHERE 0 = 1 ,没有与筛选器匹配的行。
如果不添加GROUPBY语句,则该表中的所有行都将被视为1个group。因此,结果计数将为0—对于组,有0行与筛选器匹配。
添加分组列时,SQLServer必须执行相同的计数,但现在按该列的每个不同值分组。由于您的筛选器不返回分组列的任何值,因此没有要创建的组。所以结果是没有记录。
所以两组的差别是0组对1组。无结果vs结果。

4sup72z8

4sup72z82#

没有 GROUP BY 总是返回一行。过滤掉所有行后,行上的大多数值 NULL . 例外情况是 COUNT() 价值观 0 .
具有 GROUP BY 为每个值组合返回一行。当筛选出所有行时,没有组,因此不返回任何内容。
您的第一个查询具有 GROUP BY 但过滤掉所有行。因此,没有行。第二个查询没有 GROUP BY ,因此返回一行。

相关问题