SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单

分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生。这种查询在SQL Server 2005之前,写起来很繁琐,需要用到临时表关联查询才能取到。SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单。下面是一个简单示例:

--1.创建测试表

create table #score

(

name varchar(20),

subject varchar(20),

score int

)

--2.插入测试数据

insert into #score(name,subject,score) values('张三','语文',98)

insert into #score(name,subject,score) values('张三','数学',80)

insert into #score(name,subject,score) values('张三','英语',90)

insert into #score(name,subject,score) values('李四','语文',88)

insert into #score(name,subject,score) values('李四','数学',86)

insert into #score(name,subject,score) values('李四','英语',88)

insert into #score(name,subject,score) values('李明','语文',60)

insert into #score(name,subject,score) values('李明','数学',86)

insert into #score(name,subject,score) values('李明','英语',88)

insert into #score(name,subject,score) values('林风','语文',74)

insert into #score(name,subject,score) values('林风','数学',99)

insert into #score(name,subject,score) values('林风','英语',59)

insert into #score(name,subject,score) values('严明','英语',96)

--3.取每个学科的前3名数据

select * from

(

select subject,name,score,ROW_NUMBER() over(PARTITION by subject order by score desc) as num from #score


) T where T.num <= 3 order by subject

--4.删除临时表

truncate table #score

drop table #score

语法形式:ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)

解释:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

转自:http://blog.csdn.net/zengcong2013/article/details/45833363

最新文章

  1. 集成一体化的移动POS开单扫描解决方案--&quot;移动开单掌上POS&quot;。它集后台管理软件
  2. Spring松耦合实例
  3. 远程无法连接Mysql 的解决方案
  4. PHP 输出缓冲控制(Output Control) 学习
  5. .net委托(转载)
  6. Windows7下安装搭建redis教程和配置详解
  7. 初学java,遇到的陌生词语(1)
  8. 2015第14周五Tomcat版本
  9. Linux centOS本地DNS安装
  10. truetype技术和矢量字库的技术原理及实现(转)
  11. IDEA上传项目至git
  12. MyEclipse 2014专业版的破解--Windows系统的软件安装
  13. Jenkins+maven环境部署
  14. WebApi的好处和MVC的区别
  15. Bcompare工具永久使用方法
  16. redis单例模式写法
  17. Vuex以及axios
  18. vector.erase用法注意事项
  19. 在 浏览器中调用外接设备— —手写板 【win10 x64 手动注册ocx控件的方法】
  20. 配置Groovy开发环境(Windows)

热门文章

  1. JAVA问题集锦Ⅰ
  2. ASP.NET Core 中文文档 第四章 MVC(4.6)Areas(区域)
  3. 利用for循环找出1000以内的质数
  4. 基于开源项目SharpMap的热力图(HeatLayer)实现。
  5. Android 指纹认证
  6. 跟着老男孩教育学Python开发【第三篇】:Python函数
  7. 为什么 Android Studio 工程文件夹占用空间这么大?我们来给它减减肥
  8. python之浅拷贝和深拷贝
  9. 支付宝AR抢红包?前端轻松就破解~
  10. 一种简单,轻量,灵活的C#对象转Json对象的方案