SQL 2005新增的几个函数之学习
?
原文:SQL 2005新增的幾個(gè)函數(shù)之學(xué)習(xí)
今天學(xué)習(xí)了sql server 2005新增的幾個(gè)函數(shù),分別是row_number(),rank,DENSE_RANK,ntile,下面以例子
分別簡(jiǎn)單講解之
1.row_number
?? 先來(lái)點(diǎn)數(shù)據(jù),先建個(gè)表
SELECT ROW_NUMBER() OVER (ORDER BY Age) AS [Row Number by Age], FirstName, Age FROM Person 出現(xiàn)的數(shù)據(jù)如下
Row Number by Age FirstName Age -------------------- ---------- ----------- 1 Larry 5 2 Doris 6 3 George 6 4 Mary 11 5 Sherry 11 6 Sam 17 7 Ted 23 8 Marty 23 9 Sue 29 10 Frank 38 11 John 40 ? 可以觀察到,是根據(jù)年齡升序排列了,并且row_number()是給出了序列號(hào)了,這個(gè)序列號(hào)被重命名為Row Number by Age, ? 如果不想按年齡排序,可以這樣寫
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [Row Number by Record Set], FirstName, Age FROM Person 另外一個(gè)例子
SELECT ROW_NUMBER() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender], FirstName, Age, Gender FROM Person
這里是按性別劃分區(qū)間了,同一性別再按年齡來(lái)排序,輸出結(jié)果如下 Partition by Gender FirstName Age Gender -------------------- ---------- ----------- ------ 1 Doris 6 F 2 Mary 11 F 3 Sherry 11 F 4 Sue 29 F 1 Larry 5 M 2 George 6 M 3 Sam 17 M 4 Ted 23 M 5 Marty 23 M 6 Frank 38 M 7 John 40 M 注意,姓名M開(kāi)始,序號(hào)又從1,2,3開(kāi)始了 2 RANK函數(shù)
先看例子
SELECT RANK() OVER (ORDER BY Age) AS [Rank by Age], FirstName, Age FROM Person 輸出如下
Rank by Age FirstName Age -------------------- ---------- ----------- 1 Larry 5 2 Doris 6 2 George 6 4 Mary 11 4 Sherry 11 6 Sam 17 7 Ted 23 7 Marty 23 9 Sue 29 10 Frank 38 11 John 40 看到了么,同年嶺的話,將有相同的順序,順序成1,2,2,4了
SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender], FirstName, Age, Gender FROM Person輸出為 Partition by Gender FirstName Age Gender -------------------- ---------- ----------- ------ 1 Doris 6 F 2 Mary 11 F 2 Sherry 11 F 4 Sue 29 F 1 Larry 5 M 2 George 6 M 3 Sam 17 M 4 Ted 23 M 4 Marty 23 M 6 Frank 38 M 7 John 40 M
可以看到,按性別分組了,每個(gè)性別分組里,繼續(xù)是用了rank函數(shù)
3 DENSE_RANK 函數(shù)
?? SELECT DENSE_RANK() OVER (ORDER BY Age) AS [Dense Rank by Age],
?????? FirstName,
?????? Age
? FROM Person
輸出結(jié)果為
Dense Rank by Age??? FirstName? Age
-------------------- ---------- -----------
1??????????????????? Larry????? 5
2??????????????????? Doris????? 6
2??????????????????? George???? 6
3??????????????????? Mary?????? 11
3??????????????????? Sherry???? 11
4??????????????????? Sam??????? 17
5??????????????????? Ted??????? 23
5??????????????????? Marty????? 23
6??????????????????? Sue??????? 29
7??????????????????? Frank????? 38
8??????????????????? John?????? 40
看到了么,和rank函數(shù)區(qū)別是,順序始終是連續(xù)的,Doris?和George同年,都是排第2位,但之后的mary不象rank函數(shù)那樣排第4,而是排第3位了
4 ntile函數(shù)
?輸出
FirstName Age Age Groups ---------- ----------- -------------------- Larry 5 1 Doris 6 1 George 6 1 Mary 11 1 Sherry 11 2 Sam 17 2 Ted 23 2 Marty 23 2 Sue 29 3 Frank 38 3 John 40 3這個(gè)函數(shù)按照ntile(n)中的N,把記錄強(qiáng)制分成多少段,11條記錄現(xiàn)在分成3段了,lary到mary是第1
段,sherry到maty是第2段,sue到j(luò)ohn是第3段了
?
5?? top n
?
? declare @n int
set @n=10;
select top(@n) * from table1
轉(zhuǎn)載于:https://www.cnblogs.com/yanglin/archive/2007/12/21/1009528.html
總結(jié)
以上是生活随笔為你收集整理的SQL 2005新增的几个函数之学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: showModalDialog详解
- 下一篇: 推荐一个比较好的SQL工具——SQL P