SQLSERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER
来源:互联网 发布:查看linux版本 编辑:程序博客网 时间:2024/05/02 01:21
SQL SERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER
前言
本文意于用实例数据帮助理解SQL SERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER。准备工作
创建测试表:
12345create
table
test(
id
int
identity(1,1)
primary
key
,
testid
int
,
name
varchar
(100)
)
插入测试数据:
1234567insert
into
test(testid,
name
)
select
1,
'LeeWhoee University'
insert
into
test(testid,
name
)
select
1,
'LeeWhoee University'
insert
into
test(testid,
name
)
select
1,
'LeeWhoee University'
insert
into
test(testid,
name
)
select
2,
'LeeWhoee University'
insert
into
test(testid,
name
)
select
3,
'排名函数'
insert
into
test(testid,
name
)
select
4,
'排名函数'
insert
into
test(testid,
name
)
select
4,
'排名函数'
用一个SQL语句来查看各个函数的使用:
1234567select
id,testid,
ROW_NUMBER() over(
order
by
testid)
as
rownum,
RANK() over(
order
by
testid)
as
ranknum,
DENSE_RANK() over(
order
by
testid)
as
denseranknum,
Ntile(4) over (
order
by
testid)
as
ntilenum
from
test
order
by
testid
下面是运行结果:
id testid rownum ranknum denseranknum ntilenum
1 1 1 1 1 1
2 1 2 1 1 1
3 1 3 1 1 2
4 2 4 4 2 2
5 3 5 5 3 3
6 4 6 6 4 3
7 4 7 6 4 4ROW_NUMBER() over( order by testid)
按testid升序排列为每一个testid生成与之对应的一个序列数字,这些数字是从1开始由小到大的不间断数字。每个序列数字是唯一的。
RANK() over(order by testid)
按testid升序排列为每一个testid生成与之对应的一个排名数字,这些数字是从1开始由小到大排序(可能间断)。相同的testid生成的排名数字也相同,但是下一排名数字不是由之前的排名数字加1计算出的,而是排名总数即行数。
DENSE_RANK() over(order by testid)
按testid升序排列为每一个testid生成与之对应的一个排名数字,这些数字是从1开始由小到大排序的不间断数字(可能重复)。相同的testid生成的排名数字也相同,但是下一排名数字是由之前的排名数字加1计算出,而不是排名总数或行数。
Ntile(4) over ( order by testid)
按testid升序排列并将所有testid平均分成4组(最后一组testid总数可能少于其它组),然后为每一个testid生成与之对应的一个所属组编号。组编号是从1开始由小到大的不间断数字。
partition by
下面看一个带partition by的SQL语句来查看各个函数的使用:
1234567select
id,testid,
name
,
ROW_NUMBER() over(partition
by
name
order
by
testid)
as
rownum,
RANK() over(partition
by
name
order
by
testid)
as
ranknum,
DENSE_RANK() over(partition
by
name
order
by
testid)
as
denseranknum,
Ntile(2) over (partition
by
name
order
by
testid)
as
ntilenum
from
test
order
by
name
运行结果:
id testid name rownum ranknum denseranknum ntilenum
1 1 LeeWhoee University 1 1 1 1
2 1 LeeWhoee University 2 1 1 1
3 1 LeeWhoee University 3 1 1 2
4 2 LeeWhoee University 4 4 2 2
5 3 排名函数 1 1 1 1
6 4 排名函数 2 2 2 1
7 4 排名函数 3 2 2 2ROW_NUMBER() over(partition by name order by testid)
按name先进行数据分区,然后对每一区进行正常的ROW_NUMBER()计算。
RANK() over(partition by name order by testid)
按name先进行数据分区,然后对每一区进行正常的RANK()计算。
DENSE_RANK() over(partition by name order by testid)
按name先进行数据分区,然后对每一区进行正常的DENSE_RANK()计算。
Ntile(2) over (partition by name order by testid)
按name先进行数据分区,然后对每一区进行正常的Ntile()计算。
为了便于区分数据,在这里进行了NTILE(2)而不是NTILE(4)。
来源:http://www.2cto.com/database/201403/282530.html
- SQLSERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER
- SqlServer四个排名函数(row_number、rank、dense_rank和ntile)的比较
- Sql Server2005 4个排名函数: RANK(),DENSE_RANK(),ROW_NUMBER(),NTILE()
- 排名或顺序的函数 ROW_NUMBER/RANK/DENSE_RANK/NTILE
- SQL SERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER
- sql server 排名函数 row_number,rank,dense_rank和ntile
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
- SQLServer针对排名函数ROWNUMBER()、RANK()、DENSE_RANK()、NTILE的研究!~
- RANK() ,ROW_NUMBER(),DENSE_RANK( ),ntile( )
- row_number rank dense_rank ntile
- 关于sql row_number,rank,dense_rank,ntile函数
- MSSQL 排序函数 ROW_NUMBER() RANK() DENSE_RANK() NTILE()
- SqlServer 排名函数(row_number、rank、dense_rank)的比较
- SqlServer 排名函数(row_number、rank、dense_rank)的比较
- SQL Server2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
- SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较
- java笔记day22—GUI(1)
- Git使用总结(包含Git Bash和Git GUI的使用)
- trick-交换数字
- 快速设置Mysql的auto_increment参数
- 20160607Start
- SQLSERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER
- __get(),__set()
- CSS权重
- 二叉树总结
- C/C++ RPG游戏
- UVA536 水,根据先序和中序得到二叉树的后续遍历
- js中apply的妙用
- Maven创建项目(命令创建)
- MySQL数据库优化(三)——MySQL悲观锁&&乐观锁(并发控制)