RANK
函数基于 OVER
子句中的 ORDER BY
表达式确定一组值的排名。当有相同排序值时,将会有相同的排名,并且值相同的行数会被记录到下个排名中。
语法
RANK() OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ])
作为分析函数使用,您需要使用窗口函数的完整语法,它对一组行的集合进行计算并返回多个值,具体信息请查阅文档 OVER (analytic_clause) 。
参数
参数 | 说明 |
OVER | 使用 OVER 子句定义窗口进行计算。 |
PARTITION BY [col1, col2..] | 指定开窗口的列。 |
ORDER BY col1[asc|desc] | 指定排名依据的值。 |
expr_list | 是数值类型或者可以转换成数值类型的类型。 |
order_list | 定义排名值参考的数据列。 |
示例
建表 course,并向 name 和 grade 列插入数据,执行以下语句:
CREATE TABLE course
(
name VARCHAR(8),
grade NUMBER
);
INSERT INTO course VALUES('Linda',50);
INSERT INTO course VALUES('Tan',85);
INSERT INTO course VALUES('Tom',90);
INSERT INTO course VALUES('John',95);
INSERT INTO course VALUES('Mery',55);
INSERT INTO course VALUES('Peter',60);
INSERT INTO course VALUES('Jack',65);
INSERT INTO course VALUES('Rose',70);
INSERT INTO course VALUES('Tonny',75);
INSERT INTO course VALUES('Apple',80);
COMMIT;
执行以下语句:
SELECT name,grade ,RANK() over(ORDER BY grade DESC) FROM course;
查询结果如下:
+-------+-------+------------------------------+
| NAME | GRADE | RANK()OVER(ORDERBYGRADEDESC) |
+-------+-------+------------------------------+
| John | 95 | 1 |
| Tom | 90 | 2 |
| Tan | 85 | 3 |
| Apple | 80 | 4 |
| Tonny | 75 | 5 |
| Rose | 70 | 6 |
| Jack | 65 | 7 |
| Peter | 60 | 8 |
| Mery | 55 | 9 |
| Linda | 50 | 10 |
+-------+-------+------------------------------+