Google表格:排序值的密集排名

时间:2018-03-29 23:15:22

标签: google-sheets formulas

我有一个包含3列的简单表格:

[姓名] [分数] [等级]

对于第3栏,我使用以下公式根据得分对每一行进行排名:

=RANK(C9,$C$9:$C$28,0)

问题是该公式没有返回我期望的值。例如,在最后一行,当它应为5时返回19。

我找到了其他排名公式(RANK.EQ等),但同样的问题发生了。

以下是Google Sheet,可在上下文中查看:

https://docs.google.com/spreadsheets/d/1P1m7UHPPIcQLQkzpnk-SI1y7-0mhKytCWDjA6FJzFrM/edit?usp=sharing

任何指导意见

3 个答案:

答案 0 :(得分:2)

您可以使用简单的MATCH公式实现您想要的结果:

=match(round(C9,0),NamedRange1,0)

提供了一个数组(上面名为NamedRange1),例如:

=sort(unique(round(C9:C28,0)),1,0)

答案 1 :(得分:1)

我认为结果符合预期。查看此Ranking维基百科页面(称为'标准比赛排名')。它说:

  

标准比赛排名(" 1224"排名)

     

在比赛排名中,比较相等的项目会相同   排名数字,然后在排名数字中留下差距。该   在这个差距中遗漏的排名数量少一个   比相等的项目数量。等价地,每个   item的排名是1加上排名高于它的项目数。   这种排名策略经常被用于竞赛,因为它   意味着如果两个(或更多)竞争者在一个位置上占据一席之地   排名,排名低于他们的所有人的位置不受影响   (即,只有一个人得分,竞争者才会获得第二名   比他们好,第三,如果恰好有两个人得分比他们好,   第四,如果恰好三个人的得分比他们好,等等。)。

     

因此,如果A排在B和C之前(比较相等),则两者都是   排在D之前,然后A得到排名第1("第一个"),B得到   排名第2("联合第二"),C也排名第2   ("联合第二")和D获得排名第4("第四")。

你想要的是密集排名'它可以通过 pnuts 的答案或类似的东西来实现:

  1. G9设为1
  2. G10设为=if(round(C10,0)<round(C9,0), G9+1, G9)
  3. 复制G10并将其粘贴到G11:G28
  4. 样本表为here

答案 2 :(得分:0)

感谢@pnuts和@sangboklee提供的解决方案。我想我现在有一个很好的解决方案。这是pnuts的解决方案,只是简化了:

=match(round($C9,0),sort(unique(round($C$9:$C$28,0)),1,false),0)

这基本上将创建的数组“嵌入”在单个公式中,可以应用于所有行。作为奖励,甚至不需要对值进行排序。

请检查正确的人,但我认为这是有效的。我已经从原始问题描述中更新了链接的Google表格(它是“解决方案2b”)。