Home > Database > Mysql Tutorial > SQL RANK() vs. ROW_NUMBER(): How Do They Differ When Handling Ties?

SQL RANK() vs. ROW_NUMBER(): How Do They Differ When Handling Ties?

Susan Sarandon
Release: 2025-01-13 16:56:43
Original
937 people have browsed it

SQL RANK() vs. ROW_NUMBER(): How Do They Differ When Handling Ties?

SQL RANK() and ROW_NUMBER(): detailed explanation of differences

In SQL, RANK() and ROW_NUMBER() have similar functions and are easily confused. However, understanding their subtle differences is critical for effective data manipulation.

Comparison of RANK() and ROW_NUMBER()

RANK() assigns the same rank to rows and columns with the same sort value within a partition, while ROW_NUMBER() always increments, even for rows and columns with the same value.

Key Difference: Handling Duplicate Values

The main difference between RANK() and ROW_NUMBER() is their behavior when encountering duplicate values ​​within a partition:

  • RANK(): Assigns rows with duplicate values ​​the same rank.
  • ROW_NUMBER(): Arbitrarily assign increasing ranks to rows with duplicate values.

Example

Consider the following form:

StyleID ID Description
1 1 Item A
1 1 Item B
1 1 Item C
1 2 Item D

Use the following query:

<code class="language-sql">SELECT ID, Description, RANK() OVER (PARTITION BY StyleID ORDER BY ID) AS 'Rank' FROM SubStyle;
SELECT ID, Description, ROW_NUMBER() OVER (PARTITION BY StyleID ORDER BY ID) AS 'RowNumber' FROM SubStyle;</code>
Copy after login

The same result can only be obtained if there are no duplicate values ​​within the partition. For example, if you add another row with StyleID 3 and ID 1, you will observe the following:

StyleID ID Description Rank RowNumber
1 1 Item A 1 1
1 1 Item B 1 2
1 1 Item C 1 3
1 2 Item D 4 4
3 1 New Item 1 5

As you can see, for a unique value with StyleID of 3, ROW_NUMBER() assigns an increasing number, while RANK() assigns it the same rank as a row with a duplicate value of StyleID of 1.

Conclusion

RANK() and ROW_NUMBER() serve different purposes. RANK() is used to rank unique values ​​within a group, handling duplicate values ​​appropriately. ROW_NUMBER(), on the other hand, always increments, ensuring that each row has a distinct numeric value, even for rows with duplicate values. Understanding these differences is critical to making informed decisions when working with SQL data.

The above is the detailed content of SQL RANK() vs. ROW_NUMBER(): How Do They Differ When Handling Ties?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template