row_number() 函数的用法
分别是row_number()、rank()、dense_rank()、ntile(),下面以实例分别简单讲解一下。
createtable gg(sname varchar(10),sort varchar(10),num int)
go
insertinto gg
select'白芍','根茎类',55
unionall
select'法半夏','根茎类',78
unionall
select'柴胡','根茎类',60
unionall
select'川芎','根茎类',99
unionall
select'天香炉','草类',68
unionall
select'灯心草','草类',55
unionall
select'龙葵','草类',60
unionall
select'石见穿','草类',60
unionall
select'猪笼草','草类',70
unionall
select'益母草','草类',86
unionall
select'扁豆','果实类',86
unionall
select'草果','果实类',70
unionall
select'金樱子','果实类',55
unionall
select'女贞子','果实类',94
unionall
select'胖大海','果实类',66
unionall
select'桑葚','果实类',78
select sname,sort,num,
row_number()over(orderby num)as rownum,
rank()over(orderby num)as ranknum,
dense_rank()over(orderby num)as dersenum,
ntile(3)over(orderby num)as ntilenum
from gg
--结果
--ROW_NUMBER()是按num由小到大逐一排名,不并列,排名连续
--RANK()是按num由小到大逐一排名,并列,排名不连续
--DENSE_RANK()是按num由小到大逐一排名,并列,排名连续
sname sort num rownum ranknum dersenum ntilenum
-------- --------- --------- ------------- ------------- --------------- ---------------
白芍 根茎类 55 1 1 1 1
灯心草 草类 55 2 1 1 1
金樱子 果实类 55 3 1 1 1
龙葵 草类 60 4 4 2 1
石见穿 草类 60 5 4 2 1
柴胡 根茎类 60 6 4 2 1
胖大海 果实类 66 7 7 3 2
天香炉 草类 68 8 8 4 2
草果 果实类 70 9 9 5 2
猪笼草 草类 70 10 9 5 2
法半夏 根茎类 78 11 11 6 2
桑葚 果实类 78 12 11 6 3
益母草 草类 86 13 13 7 3
扁豆 果实类 86 14 13 7 3
女贞子 果实类 94 15 15 8 3
川芎 根茎类 99 16 16 9 3
(16 行受影响)
select sname,sort,num,
row_number()over(partitionby sort orderby num)as rownum,
rank()over(partitionby sort orderby num)as ranknum,
dense_rank()over(partitionby sort orderby num)as dersenum,
ntile(3)over(partitionby sort orderby num)as ntilenum
from gg
--结果
此时加了partitionbysort,就以类别来分类了,ntile(3)意思就是强制分为三组。
sname sort num rownum ranknum dersenum ntilenum
-------- ---------- --------- ------------- --------------- ---------------- -----------
灯心草 草类 55 1 1 1 1
龙葵 草类 60 2 2 2 1
石见穿 草类 60 3 2 2 2
天香炉 草类 68 4 4 3 2
猪笼草 草类 70 5 5 4 3
益母草 草类 86 6 6 5 3
白芍 根茎类 55 1 1 1 1
柴胡 根茎类 60 2 2 2 1
法半夏 根茎类 78 3 3 3 2
川芎 根茎类 99 4 4 4 3
金樱子 果实类 55 1 1 1 1
胖大海 果实类 66 2 2 2 1
草果 果实类 70 3 3 3 2
桑葚 果实类 78 4 4 4 2
扁豆 果实类 86 5 5 5 3
女贞子 果实类 94 6 6 6 3
(16 行受影响)
--NTILE()是按num由小到大分成组逐一排名,并列,排名连续