Difference between rank dense rank and row number in SQL



row_number vs rank vs dense_rank in sql server
dense_rank vs rank vs row_number sql server
rank dense_rank row_number in sql server

In this video we will discuss the similarities and difference between RANK, DENSE_RANK and ROW_NUMBER functions in SQL Server.

Similarities between RANK, DENSE_RANK and ROW_NUMBER functions
Returns an increasing integer value starting at 1 based on the ordering of rows imposed by the ORDER BY clause (if there are no ties)
ORDER BY clause is required
PARTITION BY clause is optional
When the data is partitioned, the integer value is reset to 1 when the partition changes

SQL Script to create the Employees table
Create Table Employees
(
Id int primary key,
Name nvarchar(50),
Gender nvarchar(10),
Salary int
)
Go

Insert Into Employees Values (1, ‘Mark’, ‘Male’, 6000)
Insert Into Employees Values (2, ‘John’, ‘Male’, 8000)
Insert Into Employees Values (3, ‘Pam’, ‘Female’, 4000)
Insert Into Employees Values (4, ‘Sara’, ‘Female’, 5000)
Insert Into Employees Values (5, ‘Todd’, ‘Male’, 3000)

Notice that no two employees in the table have the same salary. So all the 3 functions RANK, DENSE_RANK and ROW_NUMBER produce the same increasing integer value when ordered by Salary column.

SELECT Name, Salary, Gender,
ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber,
RANK() OVER (ORDER BY Salary DESC) AS [Rank],
DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank
FROM Employees

You will only see the difference when there ties.

Now let’s include duplicate values for Salary column.

To do this
First delete existing data from the Employees table
DELETE FROM Employees

Insert new rows with duplicate valuse for Salary column
Insert Into Employees Values (1, ‘Mark’, ‘Male’, 8000)
Insert Into Employees Values (2, ‘John’, ‘Male’, 8000)
Insert Into Employees Values (3, ‘Pam’, ‘Female’, 8000)
Insert Into Employees Values (4, ‘Sara’, ‘Female’, 4000)
Insert Into Employees Values (5, ‘Todd’, ‘Male’, 3500)

Notice 3 employees have the same salary 8000. When you execute the following query you can clearly see the difference between RANK, DENSE_RANK and ROW_NUMBER functions.

SELECT Name, Salary, Gender,
ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber,
RANK() OVER (ORDER BY Salary DESC) AS [Rank],
DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank
FROM Employees

Difference between RANK, DENSE_RANK and ROW_NUMBER functions
ROW_NUMBER : Returns an increasing unique number for each row starting at 1, even if there are duplicates.
RANK : Returns an increasing unique number for each row starting at 1. When there are duplicates, same rank is assigned to all the duplicate rows, but the next row after the duplicate rows will have the rank it would have been assigned if there had been no duplicates. So RANK function skips rankings if there are duplicates.
DENSE_RANK : Returns an increasing unique number for each row starting at 1. When there are duplicates, same rank is assigned to all the duplicate rows but the DENSE_RANK function will not skip any ranks. This means the next row after the duplicate rows will have the next rank in the sequence.

Text version of the video

Slides

All SQL Server Text Articles

All SQL Server Slides

All Dot Net and SQL Server Tutorials in English

All Dot Net and SQL Server Tutorials in Arabic

Nguồn: https://rmacct.org/

Xem thêm bài viết khác: https://rmacct.org/cong-nghe/

  • Fantastic, Fantastic .. I'm Brazilian and I say you're the guy

    Andre Alves July 6, 2020 2:04 am Reply
  • Best youtube video lesson … fast, objective and knowledgeable

    Andre Alves July 6, 2020 2:04 am Reply
  • Hi bro, you are so brilliant!

    Yu Liu July 6, 2020 2:04 am Reply
  • You are excellent Venkat Sir!!!!!!!!!!! whatever i have doubts u r explaining it very clearly. Can you please explain unix in same way or big data please please please

    syed rubeena July 6, 2020 2:04 am Reply
  • No words, really incredible teaching.God bless you sir……

    dennis daniel July 6, 2020 2:04 am Reply
  • very lucid explanation; good job V!

    Sourabhsom1993 July 6, 2020 2:04 am Reply
  • Amazing, wonderful tutorial again! Thank you very much! I was going to watch Game of Thrones but instead of that I kept watching your videos, now… I don't know… I like them better than a fantasy series 🙂

    Trzbne July 6, 2020 2:04 am Reply
  • thanks for your tutor its great.
    how can one save the result generated by the dense rank to a dedicated coulomb

    Joshua Isaac July 6, 2020 2:04 am Reply
  • sipmly awesome.

    Bala guru R July 6, 2020 2:04 am Reply
  • Venkat rules. Thank U sir for all your videos. You are the best teacher on the planet Earth. Your way of teaching is just SUPERB! God bless you and keep goin'! Best regards from Poland.

    Krzysztof S July 6, 2020 2:04 am Reply
  • If DENSE_RANK() serves the purpose and RANK() function skips the ranking; why would anyone use it? Question asked in interview.

    sarvesh July 6, 2020 2:04 am Reply
  • Superb.!!

    Pravin Sarda July 6, 2020 2:04 am Reply
  • Superb tutorial as usual

    TAN YEW MENG July 6, 2020 2:04 am Reply
  • Nice Tutorial

    RAQIBUL ALAM RASHED July 6, 2020 2:04 am Reply
  • Thanks venkat sir!!

    Muhammad Rehbar Sheikh July 6, 2020 2:04 am Reply
  • Thanks Venkat Sir

    Anshul Dubey July 6, 2020 2:04 am Reply

Leave a Reply

Your email address will not be published. Required fields are marked *