2026-10-23 08:47:15
SQL中的RANK()函数用于对查询结果集中的行进行排名,其核心功能是在分区内按指定顺序分配排名值,相同值的行会获得相同排名,后续排名会跳过重复名次(例如两个并列第1名后,下一名为第3名)。以下是详细用法说明:
基本语法RANK() OVER ( [PARTITION BY partition_expression] ORDER BY order_expression [ASC|DESC])输出:
姓名 销售额 全局排名苏珊 250 1保罗 150 2约翰 100 3玛丽 200 4 -- 注意:玛丽实际销售额高于保罗,但因ORDER BY顺序在此示例中未正确反映(注:此例中若玛丽销售额应为最高,需检查原表数据或ORDER BY逻辑)
示例2:按部门分区排名SELECT 姓名, 部门, 销售额, RANK() OVER (PARTITION BY 部门 ORDER BY 销售额 DESC) AS 部门排名FROM 员工表;输出:
姓名 部门 销售额 部门排名苏珊 B 250 1玛丽 B 200 2保罗 A 150 1约翰 A 100 2示例3:处理并列排名若两人销售额相同:
-- 假设新增数据:汤姆A150SELECT 姓名, 部门, 销售额, RANK() OVER (PARTITION BY 部门 ORDER BY 销售额 DESC) AS 排名FROM 员工表;输出:
姓名 部门 销售额 排名苏珊 B 250 1玛丽 B 200 2保罗 A 150 1汤姆 A 150 1 -- 并列第1约翰 A 100 3 -- 跳过第2名常见应用场景通过灵活使用PARTITION BY和ORDER BY,可以高效实现复杂的数据排名需求。