分组取前数据在T-SQL常用的
查询,如取出前3的学生在各学科的学生信息
管理系统,在SQL Server 2005这个查询是非常繁琐的,并且需要使用临时表的
关联查询得到。SQL Server 2005后,row_number(是的)
介绍了
功能,对row_number分组
排序功能()
函数使得这个
操作非常简单,下面是一个简单的例子:
复制代码代码如下所示:
- 1。
创建测试表
创建表#评分
(
名称varchar(20),
主体varchar(20),
评分int
)
- 2。插入测试数据
插入#评分(名称、主题、评分)值('zhang三','
语言',98)
插入#评分(名称、主题、评分)值('zhang三、数学,80)
插入#评分(名称、主题、评分)值('zhang三,英语,90)
插入#评分(名称、主题、评分)值(李四','语言',88)
插入#评分(名称、主题、评分)值(李四、数学,86)
插入#评分(名称、主题、评分)值(李四','英语',88)
插入#评分(名称、主题、评分)值(李明','语言',60)
插入#评分(名称、主题、评分)值(李明、数学,86)
插入#评分(名称、主题、评分)值(李明','英语',88)
插入#评分(名称、主题、评分)值('lin丰','语言',74)
插入#评分(名称、主题、评分)值('lin丰','数学',99)
插入#评分(名称、主题、评分)值('lin丰','英语',59)
插入#评分(名称、主题、评分)值('yan明','英语',96)
- 3。获取每个主题的前3个数据。
SELECT * FROM
(
选择主题,姓名,成绩,row_number()在(受按分数划分)
T),按学科t.num 3
- 4。
删除临时表
TRUNCATETABLE #评分
#评分表
语法形式:row_number()在(由COL2 col1
顺序划分)
解读:根据COL1分组,组内的COL2排序,和计算出的值,这个函数表示顺序号每一组排序后。