sql server 2005中的分区函数用法(partition by 字段)
来源:互联网 发布:流行音乐史 知乎 编辑:程序博客网 时间:2024/05/19 13:27
partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组
create database StudentDB
go
use StudentDB
go
create table Student --学生成绩表
(
id int, --主键
Grade int, --班级
Score int --分数
)
go
insert Student
select 1,1,88
union all select 2,1,66
union all select 3,1,75
union all select 4,2,30
union all select 5,2,70
union all select 6,2,80
union all select 7,2,60
union all select 8,3,90
union all select 9,3,70
union all select 10,3,80
go
--所有学生信息
select * from Student
id Grade Score
----------- ----------- -----------
1 1 88
2 1 66
3 1 75
4 2 30
5 2 70
6 2 80
7 2 60
8 3 90
9 3 70
10 3 80
(10 行受影响)
--不分班按学生成绩排名
select *,ROW_NUMBER() over(order by Score desc) as Sequence from Student
id Grade Score Sequence
----------- ----------- ----------- --------------------
8 3 90 1
1 1 88 2
6 2 80 3
10 3 80 4
3 1 75 5
9 3 70 6
5 2 70 7
2 1 66 8
7 2 60 9
4 2 30 10
(10 行受影响)
--分班后按学生成绩排名
select *,row_number() over(partition by Grade order by Score desc) as Sequence from Student
id Grade Score Sequence
----------- ----------- ----------- --------------------
1 1 88 1
3 1 75 2
2 1 66 3
6 2 80 1
5 2 70 2
7 2 60 3
4 2 30 4
8 3 90 1
10 3 80 2
9 3 70 3
(10 行受影响)
-------------------------------------------------------------------------------------------------------------
假设有一个表,SQL语句如下:
[km] [int] NULL,
[kh] [int] NULL,
[cj] [int] NULL
) ON [PRIMARY]
其中km为科目号、kh为考生号、cj为成绩,现对km和kh进行分组,并获得每组前2条记录(按cj从高到低排序)。基本思想是为每组加一个序号列,再用where取序号小于等于2的。SQL语句如下:
(
select a.km,a.kh,cj,row_number() over(partition by a.km order by a.km,a.cj desc) n
from
(select km,kh,SUM(cj) cj from scan group by km,kh) a
) b where n<=2 order by km, cj desc
最后得到的结果集如下图所示。
- sql server 2005 中的分区函数用法(partition by 字段)
- sql server 2005 中的分区函数用法(partition by 字段)
- sql server 2005中的分区函数用法(partition by 字段)
- sql server 2005 中的分区函数用法(partition by 字段)
- sql server 2005 中的分区函数用法(partition by 字段)
- sql server 2005中的分区函数用法(partition by 字段)
- sql server 2005中的分区函数用法(partition by 字段)
- sql server 2005中的分区函数用法(partition by 字段)
- sql server 2005中的分区函数用法(partition by 字段)
- sql server 2005中的分区函数用法(partition by 字段)
- sql server 2005中的分区函数用法(partition by 字段)
- sql server 2005中的分区函数用法(partition by 字段)
- [MSSQL]SQL SERVER 2005-OVER (PARTITION BY…)的用法
- SQL SERVER 2005-OVER (PARTITION BY…)的用法
- sql server 2005 中的列置换函数用法(pivot 字段)
- sqlserver中分区函数 partition by的用法
- sqlserver中分区函数 partition by的用法
- sqlserver中分区函数 partition by的用法
- 获得FaceSDK 3.0 的许可信息
- jquery实现股票的各种效果
- 感受
- ajax解析xml数据的两种对比
- j2me双缓冲经典分析
- sql server 2005中的分区函数用法(partition by 字段)
- Java2 安全架构
- HTTP协议头字段及分析
- 传统js代码和用jq实现ajax的比较
- MVC分层架构
- oracle 优化步骤(一)
- jq实现级联下拉框效果
- jq实现标签页效果
- Flex 常用正则的解释