全部产品

RANK

更新时间:2020-03-23 20:04:51

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 (name VARCHAR(8), grade NUMBER);
  2. INSERT INTO course VALUES('Linda',50);
  3. INSERT INTO course VALUES('Tan',85);
  4. INSERT INTO course VALUES('Tom',90);
  5. INSERT INTO course VALUES('John',95);
  6. INSERT INTO course VALUES('Mery',55);
  7. INSERT INTO course VALUES('Peter',60);
  8. INSERT INTO course VALUES('Jack',65);
  9. INSERT INTO course VALUES('Rose',70);
  10. INSERT INTO course VALUES('Tonny',75);
  11. INSERT INTO course VALUES('Apple',80);
  12. 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. +-------+-------+------------------------------+