Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243017
  • 博文数量: 33
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-25 10:51
文章分类

全部博文(33)

文章存档

2011年(4)

2010年(7)

2009年(12)

2008年(10)

我的朋友

分类: Oracle

2011-02-25 11:18:38

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).

题目:

在oracle中有一数据表exam_result(成绩记录表),

表中的一条记录描述了“某个班某个学生某次考试的成绩"

create table EXAM_RESULT 

  ID      NUMBER(10) not null,                   --主键
  CLASSID NUMBER(10) not null,           --  班级id,关联到班级表
  USERID  NUMBER(10) not null,             --用户id,关联到用户表
  EXAMID  NUMBER(10) not null,             --试卷id,关联到试卷表
  RESULT  NUMBER(3)                              --成绩
)

 

现在要求统计完成了试卷id为1,2,3的成绩的前3名

即完成了试卷id为1的前3名,完成了试卷id为2的前3名,完成了试卷id为3的前3名

 

SQL代码:

  1. select * from (  
  2.       select   
  3.         e.classid,   
  4.         e.userid,   
  5.         e.examid,   
  6.         e.result,   
  7.             row_number() over (partition by e.examid order by e.examid, e.result desc) rn  
  8.                 from exam_result e   
  9.                         where e.examid in (1,2,3)  
  10. where rn <= 3  
阅读(1897) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

xjljgd2014-01-16 17:09:43

很有用,正是需要的,感谢分享!学习了。

chinaunix网友2011-03-06 17:48:35

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com