几个排名函数的区别

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    
*/ 

你可能感兴趣的:(函数)