excel表格中排名函数rank的使用
rank函数排名怎么用
用户投稿
管理员
发布于:2026年06月02日
5 阅读 · 0 评论
RANK 函数排名用法 ## 一、Excel 中的 RANK 函数 ### 基本语法
标签:
用户投稿
管理员
发布于:2026年06月02日
5 阅读 · 0 评论
excel表格中排名函数rank的使用
=RANK(数值, 数据区域, [排序方式]) | 参数 | 说明 | |------|------| | 数值 | 要排名的那个单元格 | | 数据区域 | 参与排名的所有数据范围 | | 排序方式 | 0 或省略 → 降序(大值排前面);1 → 升序(小值排前面) | ### 示例 假设 A 列是学生成绩: | | A | B(公式) | B(结果) | |--|---|-----------|-----------| | 1 | 90 | =RANK(A1,$A$1:$A$5,0) | 2 | | 2 | 95 | =RANK(A2,$A$1:$A$5,0) | 1 | | 3 | 80 | =RANK(A3,$A$1:$A$5,0) | 4 | | 4 | 85 | =RANK(A4,$A$1:$A$5,0) | 3 | | 5 | 70 | =RANK(A5,$A$1:$A$5,0) | 5 | > 注意 $A$1:$A$5 用了绝对引用,下拉公式时范围不会偏移。 ### 并列排名问题 RANK 遇到相同值会给出相同名次,并跳过后续名次,例如两个第2名,就没有第3名,直接到第4名。 如果想要不跳号的排名,可以用: =SUMPRODUCT((A$1:A$5>A1)*1)+1 或者用 RANK.AVG 返回平均名次。 --- ## 二、SQL 中的 RANK 窗口函数 ### 基本语法 sql RANK() OVER ( PARTITION BY 分组字段 ORDER BY 排序字段 DESC/ASC ) ### 示例 sql SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank_num, DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank_num FROM students; | name | score | RANK | DENSE_RANK | |------|-------|------|------------| | 张三 | 95 | 1 | 1 | | 李四 | 90 | 2 | 2 | | 王五 | 90 | 2 | 2 | | 赵六 | 85 | 4(跳了3) | 3(不跳) | | 孙七 | 80 | 5 | 4 | ### 三种排名函数对比 | 函数 | 并列时行为 | 是否跳号 | |------|-----------|---------| | RANK() | 并列相同名次 | 跳号 | | DENSE_RANK() | 并列相同名次 | 不跳号 | | ROW_NUMBER() | 不允许并列,强制连续编号 | 不跳号 | ### 分组排名(常用场景) sql -- 每个班级内部排名 SELECT class, name, score, RANK() OVER (PARTITION BY class ORDER BY score DESC) AS class_rank FROM students; --- ## 三、常见使用场景速查 | 场景 | Excel 写法 | SQL 写法 | |------|-----------|---------| | 成绩排名 | RANK(A1,$A$1:$A$50,0) | RANK() OVER (ORDER BY score DESC) | | 按组排名 | 用 SUMPRODUCT + 条件 | PARTITION BY 分组 | | 取 Top N | 排名后筛选 ≤ N | 子查询嵌套后 WHERE rank <= N | | 不跳号排名 | SUMPRODUCT 法 | DENSE_RANK() | 有具体使用场景的话可以告诉我,我帮你写对应的公式或 SQL。