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

语法

  1. RANK() OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ])

参数

参数

说明

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. +-------+-------+------------------------------+