ROW_NUMBER is a window function that assigns an unique integer value (which starts with one and increments by one) to each row in a result set.
ROW_NUMBER() OVER(
[PARTITION BY column_1, column_2,…]
[ORDER BY column_3,column_4,…]
)ROW_NUMBER() operates on a set of rows called a window. PARTITION BY clause splits this window into smaller subsets (i.e. partitions); if omitted, ROW_NUMBER() will treat the entire window as a single partition. ORDER BY inside OVER determines the order in which the numbers are assigned.
While using DISTINCT in conjugtion with ROW_NUMBER, it's important to remember that ROW_NUMBER() operates on the result set before the DISTINCT is applied, i.e. instead of this query
SELECT DISTINCT salary, ROW_NUMBER () OVER (ORDER BY salary)
FROM employees ORDER BY salary;use this query
WITH salaries AS (
SELECT DISTINCT salary FROM employees
) SELECT salary, ROW_NUMBER () OVER (ORDER BY salary)
FROM salaries;ROW_NUMBER() can be used for pagination.
SELECT * FROM (
SELECT *, ROW_NUMBER () OVER (ORDER BY name)
FROM employees
) x WHERE ROW_NUMBER BETWEEN 7 AND 13;