-
基本使用:
SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM VALUES
('Eric', 1, 28000),
('Alex', 1, 32000),
('Felix', 2, 21000),
('Frank', 1, 30000),
('Tom', 2, 23000),
('Jane', 3, 29000),
('Jeff', 3, 35000),
('Paul', 2, 29000),
('Charles', 2, 23000),
('Charles F', 2, 23000),
('null',4,null),
('NotNull',4,23000)
AS tab(name, dep_no, salary);
+-----------+--------+---------+
| name | salary | row_num |
+-----------+--------+---------+
| Jeff | 35000 | 1 |
| Alex | 32000 | 2 |
| Frank | 30000 | 3 |
| Jane | 29000 | 4 |
| Paul | 29000 | 5 |
| Eric | 28000 | 6 |
| Tom | 23000 | 7 |
| Charles | 23000 | 8 |
| Charles F | 23000 | 9 |
| NotNull | 23000 | 10 |
| Felix | 21000 | 11 |
| null | null | 12 |
+-----------+--------+---------+
-
使用分区:
SELECT name,dep_no, salary, RANK() OVER (PARTITION BY dep_no ) AS row_num
FROM VALUES
('Eric', 1, 28000),
('Alex', 1, 32000),
('Felix', 2, 21000),
('Frank', 1, 30000),
('Tom', 2, 23000),
('Jane', 3, 29000),
('Jeff', 3, 35000),
('Paul', 2, 29000),
('Charles', 2, 23000),
('Charles F', 2, 23000),
('null',4,null),
('NotNull',4,23000)
AS tab(name, dep_no, salary);
+-----------+--------+--------+---------+
| name | dep_no | salary | row_num |
+-----------+--------+--------+---------+
| Jane | 3 | 29000 | 1 |
| Jeff | 3 | 35000 | 1 |
| Eric | 1 | 28000 | 1 |
| Alex | 1 | 32000 | 1 |
| Frank | 1 | 30000 | 1 |
| Felix | 2 | 21000 | 1 |
| Tom | 2 | 23000 | 1 |
| Paul | 2 | 29000 | 1 |
| Charles | 2 | 23000 | 1 |
| Charles F | 2 | 23000 | 1 |
| null | 4 | null | 1 |
| NotNull | 4 | 23000 | 1 |
+-----------+--------+--------+---------+
-
多列排序:
SELECT name,dep_no, salary, ROW_NUMBER() OVER (PARTITION BY dep_no ORDER BY salary DESC,name ASC) AS row_num
FROM VALUES
('Eric', 1, 28000),
('Alex', 1, 32000),
('Felix', 2, 21000),
('Frank', 1, 30000),
('Tom', 2, 23000),
('Jane', 3, 29000),
('Jeff', 3, 35000),
('Paul', 2, 29000),
('Charles', 2, 23000),
('Charles F', 2, 23000),
('null',4,null),
('NotNull',4,23000)
AS tab(name, dep_no, salary);
+-----------+--------+--------+---------+
| name | dep_no | salary | row_num |
+-----------+--------+--------+---------+
| Jeff | 3 | 35000 | 1 |
| Jane | 3 | 29000 | 2 |
| Alex | 1 | 32000 | 1 |
| Frank | 1 | 30000 | 2 |
| Eric | 1 | 28000 | 3 |
| Paul | 2 | 29000 | 1 |
| Charles | 2 | 23000 | 2 |
| Charles F | 2 | 23000 | 3 |
| Tom | 2 | 23000 | 4 |
| Felix | 2 | 21000 | 5 |
| NotNull | 4 | 23000 | 1 |
| null | 4 | null | 2 |
+-----------+--------+--------+---------+