几个排名函数的区别

CREATE  TABLE Person( 
FirstName VARCHAR( 10), 
Age INT, 
Gender  CHAR( 1)) 
INSERT  INTO Person VALUES ('Ted', 23,'M') 
INSERT  INTO Person VALUES ('John', 40,'M') 
INSERT  INTO Person VALUES ('George', 6,'M') 
INSERT  INTO Person VALUES ('Mary', 11,'F') 
INSERT  INTO Person VALUES ('Sam', 17,'M') 
INSERT  INTO Person VALUES ('Doris', 6,'F') 
INSERT  INTO Person VALUES ('Frank', 38,'M') 
INSERT  INTO Person VALUES ('Larry', 5,'M') 
INSERT  INTO Person VALUES ('Sue', 29,'F') 
INSERT  INTO Person VALUES ('Sherry', 11,'F') 
INSERT  INTO Person VALUES ('Marty', 23,'F') 
 
SELECT  * 
FROM    Person 
/* 
FirstName     Age     Gender 
Ted     23    
John     40    
George     6    
Mary     11    
Sam     17    
Doris     6    
Frank     38    
Larry     5    
Sue     29    
Sherry     11    
Marty     23    
*/ 
 
SELECT  ROW_NUMBER() OVER (  ORDER  BY Age )  AS [id] , 
        FirstName , 
        Age, 
        Gender 
FROM    Person 
/* 
id     FirstName     Age     Gender 
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    
*/ 
--不打乱原来的排序 
SELECT  ROW_NUMBER() OVER (  ORDER  BY (  SELECT    0 
                                     ) )  AS [id] , 
        FirstName , 
        Age, 
        Gender 
FROM    Person 
/* 
id     FirstName     Age     Gender 
1     Ted     23    
2     John     40    
3     George     6    
4     Mary     11    
5     Sam     17    
6     Doris     6    
7     Frank     38    
8     Larry     5    
9     Sue     29    
10     Sherry     11    
11     Marty     23    
*/ 
 
SELECT  RANK() OVER (  ORDER  BY Age )  AS [Rank  by Age] , 
        FirstName , 
        Age , 
        Gender 
FROM    Person 
 
/* 
Rank by Age     FirstName     Age     Gender 
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    
*/ 
 
SELECT  DENSE_RANK() OVER (  ORDER  BY Age )  AS [Dense Rank  by Age] , 
        FirstName , 
        Age , 
        Gender 
FROM    Person 
 
/* 
Dense Rank by Age     FirstName     Age     Gender 
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    
*/ 
SELECT  FirstName , 
        Age , 
        Gender , 
        NTILE( 2) OVER (  ORDER  BY Age )  AS [Age Groups] 
FROM    Person 
 
/* 
FirstName     Age     Gender     Age Groups 
Larry     5     M    
Doris     6     F    
George     6     M    
Mary     11     F    
Sherry     11     F    
Sam     17     M    
Ted     23     M    
Marty     23     F    
Sue     29     F    
Frank     38     M    
John     40     M    
*/ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值