Group by ALL,groupbyall
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将不被支持。group by 属于聚合函数,查询时要将被查询的列聚合起来,例如:
C1 C2 C3
A 1 99
A 2 83
A 3 99
B 3 22
SELECT C1, SUM(C2) FROM T GROUP BY C1;
sum 是求和
group by 是分组
给你举几个例子以说明:
select 机关,成绩 from JBB
* 读取所有源数据
select 机关,成绩 from JBB group by 机关
* 【机关】每个仅出现一次-不重复,【成绩】=最后一条记录的【成绩】
select 机关,sum(成绩) from JBB
* 就1条记录,【机关】=最后一条记录的【机关】,成绩=表里面所有【成绩】之和
select 机关,sum(成绩) from JBB group by 机关
* 【机关】每个仅出现一次-不重复,【成绩】=对应每个【机关的成绩】之和
参考资料:这样子你就明白了吧
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。