Group by ALL

Group by ALL 。和不加ALL差别就是加了ALL后包含所有组和结果集,甚至包含那些其中任何行都不满足 WHERE 子句指定的搜索条件的组和结果集。注意的是指定了 ALL,将对组中不满足搜索条件的汇总列返回空值。

declare @t table(id int,col char(2))
insert @t select 1,'a'
insert @t select 1,'a'
insert @t select 2,'a'
insert @t select 3,'a'
insert @t select 3,'a'
insert @t select 4,'a'
insert @t select 5,'a'
insert @t select 5,'a'
insert @t select 5,'a'
--1
select id,COUNT(1)
from @t
group by id
--2
select id,COUNT(1)
from @t
where id < 3
group by id
针对上面的数据我们可以得到显而意见的结果 :
/*
id         
----------- -----------
1           2
2           1
3           2
4           1
5           3
(5 行受影响)
id         
----------- -----------
1           2
2           1
(2 行受影响)
*/
   那么如果我们想要得到如下结果呢?
/*
id         
----------- -----------
1           2
2           1
3           0
4           0
5           0
*/
--显然大家一看就知道我的意思了吧,常规有人一定会union联合、子查询什么的吧,有没有想过其实可以简单点呀,看看下面的语法:
--3
select id,COUNT(1)
from @t
where id < 3
group by all id
    结果大家自己运行一下就有答案了。
最后后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,如果以后的项目里有使用的话还是着手修改当前还在使用该功能的应用程序吧。另外还得注意三点:1、CUBE 或 ROLLUP 运算符不能和ALL同时使用。2、如果在访问远程表的查询中还有 WHERE 子句,则该查询不支持 GROUP BY ALL。3、对于具有 FILESTREAM 属性的列,GROUP BY ALL将不被支持。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值