日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

row_number()、rank()、dense_rank()、ntile()

系統(tǒng) 2124 0
原文: row_number()、rank()、dense_rank()、ntile()

SQL2005中row_number()等函數(shù)的用法

2005比2000新增了幾個函數(shù),分別是row_number()、rank()、dense_rank()、ntile(),下面以實(shí)例分別簡單講解一下。

代碼
        
1 create table gg(sname varchar ( 10 ),sort varchar ( 10 ),num int )
2 ? go
3
4 ? insert into gg
5 ? select ' 白芍 ' , ' 根莖類 ' , 55
6 ? union all
7 ? select ' 法半夏 ' , ' 根莖類 ' , 78
8 ? union all
9 ? select ' 柴胡 ' , ' 根莖類 ' , 60
10 union all
11 select ' 川芎 ' , ' 根莖類 ' , 99
12 union all
13 select ' 天香爐 ' , ' 草類 ' , 68
14 union all
15 select ' 燈心草 ' , ' 草類 ' , 55
16 union all
17 select ' 龍葵 ' , ' 草類 ' , 60
18 union all
19 select ' 石見穿 ' , ' 草類 ' , 60
20 union all
21 select ' 豬籠草 ' , ' 草類 ' , 70
22 union all
23 select ' 益母草 ' , ' 草類 ' , 86
24 union all
25 select ' 扁豆 ' , ' 果實(shí)類 ' , 86
26 union all
27 select ' 草果 ' , ' 果實(shí)類 ' , 70
28 union all
29 select ' 金櫻子 ' , ' 果實(shí)類 ' , 55
30 union all
31 select ' 女貞子 ' , ' 果實(shí)類 ' , 94
32 union all
33 select ' 胖大海 ' , ' 果實(shí)類 ' , 66
34 union all
35 select ' 桑葚 ' , ' 果實(shí)類 ' , 78
36
37 select sname,sort,num,
38 row_number() over ( order by num) as rownum,
39 rank() over ( order by num) as ranknum,
40 dense_rank() over ( order by num) as dersenum,
41 ntile( 3 ) over ( order by num) as ntilenum
42 from gg
43

--結(jié)果

--ROW_NUMBER()是按num由小到大逐一排名,不并列,排名連續(xù)

--RANK()是按num由小到大逐一排名,并列,排名不連續(xù)

--DENSE_RANK()是按num由小到大逐一排名,并列,排名連續(xù)

--NTILE()是按num由小到大分成組逐一排名,并列,排名連續(xù)

sname????? sort?????? num?????? rownum??????? ranknum?????? dersenum?????? ntilenum
-------- --------- --------- ------------- ------------- --------------- ---------------
白芍???????? 根莖類?????? 55????????? 1????????  ? 1???????????  ? 1??????????????   1
燈心草?????? 草類???????? 55????????? 2?????  ???? 1?????????  ??? 1??????????????   1
金櫻子?????? 果實(shí)類?????? 55????????? 3??????  ??? 1????????  ???? 1?????????????  ? 1
龍葵???????? 草類???????? 60????????? 4???????  ?? 4?????????   ??? 2????????????  ?? 1
石見穿?????? 草類???????? 60????????? 5??  ??????? 4???????????  ? 2????????????  ?? 1
柴胡???????? 根莖類?????? 60????????? 6????????  ? 4????????????   2????????????  ?? 1
胖大海?????? 果實(shí)類?????? 66????????? 7???????  ?? 7???????????  ? 3????????????  ?? 2
天香爐?????? 草類???????? 68????????? 8?????????   8????????????   4?????????????  ? 2
草果???????? 果實(shí)類?????? 70????????? 9?????????   9????????????   5??????????????   2
豬籠草?????? 草類???????? 70????????? 10????????   9???????????  ? 5??????????????   2
法半夏?????? 根莖類?????? 78????????? 11????????   11?????????  ?? 6?????????????  ? 2
桑葚???????? 果實(shí)類?????? 78????????? 12????????   11??????????  ? 6??????????????   3
益母草?????? 草類???????? 86????????? 13????????   13???????????   7?????????????  ? 3
扁豆???????? 果實(shí)類?????? 86????????? 14????????   13???????????   7?????????????  ? 3
女貞子?????? 果實(shí)類?????? 94????????? 15????????   15??????????  ? 8?????????????  ? 3
川芎???????? 根莖類?????? 99????????? 16????????   16???????????   9?????????????  ? 3

(16 行受影響)

代碼
        
select sname,sort,num,
row_number()
over (partition by sort order by num) as rownum,
rank()
over (partition by sort order by num) as ranknum,
dense_rank()
over (partition by sort order by num) as dersenum,
ntile(
3 ) over (partition by sort order by num) as ntilenum
from gg

--結(jié)果

此時加了partition by sort,就以類別來分類了,ntile(3)意思就是強(qiáng)制分為三組。

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
金櫻子?????? 果實(shí)類??????? 55????????? 1??????????? 1?????????????? 1?????????????? 1
胖大海?????? 果實(shí)類??????? 66????????? 2??????????? 2?????????????? 2?????????????? 1
草果???????? 果實(shí)類??????? 70????????? 3??????????? 3?????????????? 3?????????????? 2
桑葚???????? 果實(shí)類??????? 78????????? 4??????????? 4?????????????? 4?????????????? 2
扁豆???????? 果實(shí)類??????? 86????????? 5??????????? 5?????????????? 5?????????????? 3
女貞子?????? 果實(shí)類??????? 94????????? 6??????????? 6?????????????? 6?????????????? 3

(16 行受影響)

下面分別用SQL 2000實(shí)現(xiàn),相對比2005要麻煩的多了。

--ROW_NUMBER在sql 2000中的實(shí)現(xiàn)

--利用臨時表和IDENTITY(函數(shù))

代碼
        
1 select sname,num, identity ( int , 1 , 1 ) as rownumber
2 into #tem
3 from gg
4 order by num
5
6 select sname,num,rownumber
7 from #tem
8
9 drop table #tem
10 go
11
12 -- RANK在sql 2000中的實(shí)現(xiàn)
13 select sname,num,
14 ( select count ( 1 ) + 1 from gg where num < g.num) as ranknum
15 from gg g
16 order by num
17 go
18
19 -- DENSE_RANK在sql 2000中的實(shí)現(xiàn)
20 select num, identity ( int , 1 , 1 ) as densenum
21 into #t
22 from gg
23 group by num
24 order by num
25
26 select r.sname,r.num,t.densenum
27 from gg r join #t t
28 on r.num = t.num
29 order by num
30
31 drop table #t
32 go
33

row_number()、rank()、dense_rank()、ntile()


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 原平市| 莎车县| 石渠县| 廉江市| 牟定县| 乌鲁木齐市| 天等县| 成都市| 平阴县| 莫力| 石阡县| 泸溪县| 通河县| 通道| 当涂县| 治多县| 赣榆县| 得荣县| 家居| 江都市| 双峰县| 威信县| 陵水| 长春市| 江门市| 阳朔县| 双牌县| 县级市| 阿城市| 合山市| 东兰县| 濉溪县| 藁城市| 河北省| 兰州市| 合山市| 遵化市| 沂南县| 土默特左旗| 大竹县| 宝清县|