Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


RANK

📄字数 770
👁️阅读量 加载中...

功能描述

为有序结果集中的每一行分配一个排名,排名并列时,将并列数加到排名上用于计算下一个排名,所以排名有可能不是一个连续的值。

语法格式

sql
RANK() OVER(analytic_clause)

输入参数

  • analytic_clause:分析子句,支持分组子句,排序子句以及范围子句,其中排序子句是必须项,分析子句的详细说明请参考 analytic_clause

提示

  • PARTITION BY:可选,按列分区(如 deptno),每个分区独立排名。
  • ORDER BY:指定排序依据(如 price DESC),决定排名顺序。

输出结果

输出结果为INTEGER类型,当数据存在重复值时,它会为相同值分配并列名次,并自动跳过后续名次(例如:[100, 100, 90]的排名结果为[1, 1, 3])。

示例

SQL
-- 创建示例表
SQL> CREATE TABLE sal_info(id INT IDENTITY(1,1),name VARCHAR,deptno INT,sal NUMERIC(10,2));

-- 插入数据到示例表
SQL> INSERT INTO sal_info VALUES(DEFAULT,'张三',10,5000);
SQL> INSERT INTO sal_info VALUES(DEFAULT,'李四',10,5500);
SQL> INSERT INTO sal_info VALUES(DEFAULT,'王五',10,4500);
SQL> INSERT INTO sal_info VALUES(DEFAULT,'赵六',10,4800);

-- 查询数据
SQL> SELECT *,RANK() OVER(PARTITION BY deptno ORDER BY sal) rk FROM sal_info ORDER BY deptno,rk;

+----+------+--------+------+----+
| ID | NAME | DEPTNO | SAL  | RK |
+----+------+--------+------+----+
| 3  | 王五 | 10     | 4500 | 1  |
| 4  | 赵六 | 10     | 4800 | 2  |
| 1  | 张三 | 10     | 5000 | 3  |
| 2  | 李四 | 10     | 5500 | 4  |
+----+------+--------+------+----+

扩展

  • 为相同值分配相同的排名,且分配连续的排名,请参考函数 DENSE_RANK()
  • 为相同值分配不同的排名,请参考函数 ROW_NUMBER()