随笔 - 103  文章 - 2 评论 - 921 trackbacks - 21
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011


转载请保留链接。
国际管理VS中国国情链接 8-21 13:48

与我联系

搜索

 

常用链接

留言簿(13)

我参与的团队

我的标签

随笔分类

随笔档案

文章分类

相册

最新随笔

积分与排名

  • 积分 - 148437
  • 排名 - 249

最新评论

阅读排行榜

评论排行榜

在sql server2005中可以在聚合函数的后面使用over(partition by col)替换group by的写法。有时候这样写比group by的形式要简短一些。下面我用AVG为例说明一下:
下面的sql创建了一张student_class_grade的表,该表的三个字段分别为学生id,班级编号,成绩;我们需要查询系统中的所有同学的成绩,和班级的平均成绩。
if object_id('student_class_grade','U'is not null
drop table student_class_grade;
GO
create table student_class_grade
(
    student_id 
int--学生id
    class_no int--班级编号
    grade int --成绩
);
GO
INSERT INTO student_class_grade VALUES(1,1,90);
INSERT INTO student_class_grade VALUES(2,1,85);
INSERT INTO student_class_grade VALUES(3,1,80);
INSERT INTO student_class_grade VALUES(4,1,80);
INSERT INTO student_class_grade VALUES(5,1,90);
INSERT INTO student_class_grade VALUES(6,1,75);
INSERT INTO student_class_grade VALUES(7,1,89);

INSERT INTO student_class_grade VALUES(11,2,90);
INSERT INTO student_class_grade VALUES(12,2,85);
INSERT INTO student_class_grade VALUES(13,2,80);
INSERT INTO student_class_grade VALUES(14,2,80);
INSERT INTO student_class_grade VALUES(15,2,90);
INSERT INTO student_class_grade VALUES(16,2,75);
INSERT INTO student_class_grade VALUES(17,2,100);
sql server2005中我们可以用简单的一个语句完成这个任务partition by 后面跟聚合列,如下:
select    
    student_id,class_no,grade
    ,class_avg_grade 
= AVG(grade) over(partition by class_no) 
from student_class_grade
若是在2000中,我们不得不使用子查询,查询要复杂一些
select scg.student_id
    ,scg.class_no
    ,scg.grade
    ,t_avg. class_avg_grade 
from student_class_grade scg
INNER JOIN 
(
select class_no,class_avg_grade = AVG(grade) from student_class_grade group by class_no) t_avg
ON t_avg.class_no = scg.class_no
同样其他聚合函数SUM,COUNT,MAX,MIN也可以使用类似用法。
Tag标签: t-sql
posted on 2008-05-27 12:38 玉开 阅读(1752) 评论(10)  编辑 收藏 所属分类: 数据库sql server

FeedBack:
#1楼  2008-05-27 12:50 金色海洋(jyk)      
收藏.
  回复  引用  查看    
#2楼 [楼主] 2008-05-27 12:54 玉开      
@金色海洋(jyk)
谢谢参观,期待你的佳作。
  回复  引用  查看    
#3楼  2008-05-27 13:32 清风笑      
收藏
  回复  引用  查看    
#4楼  2008-05-27 13:53 金色海洋(jyk)      
有一种受宠若惊的感觉。

最近大脑不转了,即使是简单的思考都会造成头痛。是不是用脑过度呀。

2005系列才开始使用,还有很多不熟悉的地方呢,希望多多指教。
  回复  引用  查看    
#5楼 [楼主] 2008-05-27 14:26 玉开      
@金色海洋(jyk)
呵呵,谦虚了。
  回复  引用  查看    
#6楼  2008-05-27 15:10 zbh [未注册用户]
就是Oracle分析函数中的一部分
  回复  引用    
#7楼 [楼主] 2008-05-27 15:18 玉开      
@zbh
聚合函数,分析函数 差不多都是一个意思吧。
  回复  引用  查看    
#8楼  2008-05-27 15:46 编程的夜猫      
支持,顶一个
  回复  引用  查看    
#9楼  2008-05-27 23:43 aaaaaaaaa [未注册用户]
这不是跟oracle的分析函数差不多嘛
  回复  引用    
#10楼 [楼主] 2008-05-28 09:39 玉开      
@aaaaaaaaa
熟悉oracle的同胞还不少呀。
  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-27 13:13 编辑过
成果网帮您增加网站收入


相关链接: