Rank():
Returns the rank of each row within the partition of a result set. The rank of a row is one plus the number of ranks that come before the row in question.
Usage: RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
Dense_Rank() :
Returns the rank of rows within the partition of a result set, without any gaps in the ranking. The rank of a row is one plus the number of distinct ranks that come before the row in question.
Usage: DENSE_RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
Ntile():
Distributes the rows in an ordered partition into a specified number of groups. The groups are numbered, starting at one. For each row, NTILE returns the number of the group to which the row belongs.
Usage: NTILE (integer_expression) OVER ( [ <partition_by_clause> ] < order_by_clause > )
Row_Number():
Returns the sequential number of a row within a partition of a result set, starting at 1 for the first row in each partition.
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
Example
All Recordset :
rank function is working like match one ”Duru” as 1 match another “Duru” as 1 but total count as 2 , next surname matches “Lowe” as count +1 as 3 , another “Lowe” as 3 ; now total count is 4 matching next surname as “Marcel” is count + 1 as 5 and goes on ….
Dense rank its obvious like shown.
if you want to make your denserank number reseting by groups there is a way use PARTITION BY
below example reseting ranks by using “partition by” by course column
select dense_rank() over (Partition by course order by Surname) as [DenseRank], * from finals
Thats all folks…
Original Article: http://blog.bugrapostaci.com/2010/01/26/t-sql-rank-dense_rank-ntile-row_number/
Returns the rank of each row within the partition of a result set. The rank of a row is one plus the number of ranks that come before the row in question.
Usage: RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
Dense_Rank() :
Returns the rank of rows within the partition of a result set, without any gaps in the ranking. The rank of a row is one plus the number of distinct ranks that come before the row in question.
Usage: DENSE_RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
Ntile():
Distributes the rows in an ordered partition into a specified number of groups. The groups are numbered, starting at one. For each row, NTILE returns the number of the group to which the row belongs.
Usage: NTILE (integer_expression) OVER ( [ <partition_by_clause> ] < order_by_clause > )
Row_Number():
Returns the sequential number of a row within a partition of a result set, starting at 1 for the first row in each partition.
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
Example
All Recordset :
select * from finals
RecordID | Name | Surname | Course | Point |
1 | Bugra | Postaci | Mathematics | 89 |
2 | Bugra | Postaci | Lecture | 90 |
3 | Dany | Lowe | Mathematics | 75 |
4 | Dany | Lowe | Lecture | 85 |
5 | Alice | Marcel | Mathematics | 77 |
6 | Alice | Marcel | Lecture | 100 |
7 | Simon | Duru | Mathematics | 45 |
8 | Simon | Duru | Lecture | 58 |
select row_number() over(order by RecordID desc) as RowNumber ,* from finals
RowNumber | RecordID | Name | Surname | Course | Point |
1 | 8 | Simon | Duru | Lecture | 58 |
2 | 7 | Simon | Duru | Mathematics | 45 |
3 | 6 | Alice | Marcel | Lecture | 100 |
4 | 5 | Alice | Marcel | Mathematics | 77 |
5 | 4 | Dany | Lowe | Lecture | 85 |
6 | 3 | Dany | Lowe | Mathematics | 75 |
7 | 2 | Bugra | Postaci | Lecture | 90 |
8 | 1 | Bugra | Postaci | Mathematics | 89 |
select ntile(2) over(order by RecordID desc) as [Ntile] ,* from finals
Ntile | RecordID | Name | Surname | Course | Point |
1 | 8 | Simon | Duru | Lecture | 58 |
1 | 7 | Simon | Duru | Mathematics | 45 |
1 | 6 | Alice | Marcel | Lecture | 100 |
1 | 5 | Alice | Marcel | Mathematics | 77 |
2 | 4 | Dany | Lowe | Lecture | 85 |
2 | 3 | Dany | Lowe | Mathematics | 75 |
2 | 2 | Bugra | Postaci | Lecture | 90 |
2 | 1 | Bugra | Postaci | Mathematics | 89 |
as you see ntile function just divide the scope with given number
select rank() over (order by Surname) as [Rank], * from finals Rank | RecordID | Name | Surname | Course | Point |
1 | 7 | Simon | Duru | Mathematics | 45 |
1 | 8 | Simon | Duru | Lecture | 58 |
3 | 3 | Dany | Lowe | Mathematics | 75 |
3 | 4 | Dany | Lowe | Lecture | 85 |
5 | 5 | Alice | Marcel | Mathematics | 77 |
5 | 6 | Alice | Marcel | Lecture | 100 |
7 | 1 | Bugra | Postaci | Mathematics | 89 |
7 | 2 | Bugra | Postaci | Lecture | 90 |
rank function is working like match one ”Duru” as 1 match another “Duru” as 1 but total count as 2 , next surname matches “Lowe” as count +1 as 3 , another “Lowe” as 3 ; now total count is 4 matching next surname as “Marcel” is count + 1 as 5 and goes on ….
select dense_rank() over (order by Surname) as [DenseRank], * from finals
DenseRank | RecordID | Name | Surname | Course | Point |
1 | 7 | Simon | Duru | Mathematics | 45 |
1 | 8 | Simon | Duru | Lecture | 58 |
2 | 3 | Dany | Lowe | Mathematics | 75 |
2 | 4 | Dany | Lowe | Lecture | 85 |
3 | 5 | Alice | Marcel | Mathematics | 77 |
3 | 6 | Alice | Marcel | Lecture | 100 |
4 | 1 | Bugra | Postaci | Mathematics | 89 |
4 | 2 | Bugra | Postaci | Lecture | 90 |
if you want to make your denserank number reseting by groups there is a way use PARTITION BY
below example reseting ranks by using “partition by” by course column
select dense_rank() over (Partition by course order by Surname) as [DenseRank], * from finals
DenseRank | RecordID | Name | Surname | Course | Point |
1 | 8 | Simon | Duru | Lecture | 58 |
2 | 4 | Dany | Lowe | Lecture | 85 |
3 | 6 | Alice | Marcel | Lecture | 100 |
4 | 2 | Bugra | Postaci | Lecture | 90 |
1 | 7 | Simon | Duru | Mathematics | 45 |
2 | 3 | Dany | Lowe | Mathematics | 75 |
3 | 5 | Alice | Marcel | Mathematics | 77 |
4 | 1 | Bugra | Postaci | Mathematics | 89 |
Original Article: http://blog.bugrapostaci.com/2010/01/26/t-sql-rank-dense_rank-ntile-row_number/
No comments:
Post a Comment