RANK 函数基于 OVER 子句中的 ORDER BY 表达式确定一组值的排名。当有相同排序值时,将会有相同的排名,并且值相同的行数会被记录到下个排名中。

语法

  1. 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,并向 namegrade 列插入数据,执行以下语句:

  1. CREATE TABLE course
  2. (
  3. name VARCHAR(8),
  4. grade NUMBER
  5. );
  6. INSERT INTO course VALUES('Linda',50);
  7. INSERT INTO course VALUES('Tan',85);
  8. INSERT INTO course VALUES('Tom',90);
  9. INSERT INTO course VALUES('John',95);
  10. INSERT INTO course VALUES('Mery',55);
  11. INSERT INTO course VALUES('Peter',60);
  12. INSERT INTO course VALUES('Jack',65);
  13. INSERT INTO course VALUES('Rose',70);
  14. INSERT INTO course VALUES('Tonny',75);
  15. INSERT INTO course VALUES('Apple',80);
  16. COMMIT;

执行以下语句:

  1. SELECT name,grade ,RANK() over(ORDER BY grade DESC) FROM course;

查询结果如下:

  1. +-------+-------+------------------------------+
  2. | NAME | GRADE | RANK()OVER(ORDERBYGRADEDESC) |
  3. +-------+-------+------------------------------+
  4. | John | 95 | 1 |
  5. | Tom | 90 | 2 |
  6. | Tan | 85 | 3 |
  7. | Apple | 80 | 4 |
  8. | Tonny | 75 | 5 |
  9. | Rose | 70 | 6 |
  10. | Jack | 65 | 7 |
  11. | Peter | 60 | 8 |
  12. | Mery | 55 | 9 |
  13. | Linda | 50 | 10 |
  14. +-------+-------+------------------------------+