需求场景:对上面的数据进行排名计算,4种情况:
①不考虑commDate,单独对FoldPageNum进行排名,不连续排名;
②不考虑commDate,单独对FoldPageNum进行排名,连续排名;
③按commDate分组,对FoldPageNum进行组内排名,不连续排名;
④按commDate分组,对FoldPageNum进行组内排名,连续排名。

①不考虑commDate,单独对FoldPageNum进行排名,不连续排名:

= RANK(B2, B:B, 0)
或者
= RANK.EQ(B2, B:B, 0)

这两个函数是一样的,输出的结果如下:

②不考虑commDate,单独对FoldPageNum进行排名,连续排名:

第一种方法:

= IF( N(D2) = N(D1), N(E1), N(E1) + 1
)

这种方法有2个前提:1. 先算不连续排名;2. 将表格按计算出来的不连续排名进行升序排序。
函数N()用于将单元格里的值转为数值,文本转成数据等于0,再加1就是排名1了。

第二种方法:

= SUMPRODUCT( (B$2:B$11 >= B2) / COUNTIF(B$2:B$11, B$2:B$11) )
即
= SUMPRODUCT( (B$2:B$11 >= B2) * (1 / COUNTIF(B$2:B$11, B$2:B$11) ) )


分为2块计算,
(B$2:B$11 >= B2)输出一个由True和False组成的数组;
COUNTIF(B$2:B$11, B$2:B$11)输出每个值在选定的数据区域里面的重复次数,然后被1除,得到1/n;
然后与上面的True和False数组求乘积和,便得到排名。比如下图以FoldPageNum = 8为例,计算它的排名,C列计算出True和False数组,>= 8的都为True;然后countif()计算每个值重复的次数,被1除得到1/n;然后用sumproduct对两部分算乘积和,得到FoldPageNum = 8的排名 = True * 0.5 + True * 0.5 + True * 1 = 2

不过这种方法有一个麻烦的地方就是,当新增数据后,整列的公式都要改,因为用美分号锁定了计算区域。

③按commDate分组,对FoldPageNum进行组内排名,不连续排名:

第一种方法:

= COUNTIFS(A:A, A2, B:B, ">" & B2) + 1


逻辑:用countifs先对A列进行分组识别,然后计算组内大于当前值的个数再加1就是该数值的组内排名。

第二种方法:

= SUMPRODUCT((A:A = A2) * (B:B > B2)) + 1


逻辑:先对A列进行逻辑判断,得到True和False组成的数组,再对B列进行大于该值的逻辑判断,同样得到True和False组成的数组,2个数组求乘积和再加1,就是该值的组内排名了。如果看了上面的Sumproduct函数的解析,这里应该就能直接看懂了。

④按commDate分组,对FoldPageNum进行组内排名,连续排名:

第一种方法:

= IF(N(H2) = N(H1),N(I1),IF(N(H2) = 1,1,N(I1) + 1)
)


跟上面的不分组连续排名方法一样,这里有2个前提:1. 先算不连续排名;2. 将表格按计算出来的不连续排名进行升序排序。
这里对不连续排名加多了一层判断,如果相邻2个值不相等时,如果下面的值为1,则重新从1开始排。

第二种方法:

= COUNT( 0 / (B2 <= (MATCH(A2&B$2:B$11, A$2:A$11&B$2:B$11, 0) = ROW($1:$10) ) * B$2:B$11) )
写完不是按Enter,而是Ctrl + Shift + Enter


这个公式的逻辑有点意思,思路就是,比如说第4行的“2021-07-26 8”,就是先把维度“2021-07-26”所在的行区域找出来,然后再拿值“8”在这个区域里面算排名。然后最精髓的就是通过行号与固定行号的匹配判断进行去重过滤,拿到不重复的值列表。
具体就是:

  1. 先用"2021-07-26"和B列拼起来,然后在A列和B列对应拼起来的列表里面用match查找第一个匹配到的位置,得到的结果就是{1,1,3,4,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A}这样一个列表,除了"2021-07-26"所在的行,其他的都变成错误值,以此来锁定这个区域。

(这里会有一个漏洞,就是2021-07-26和8拼起来是2021-07-268,2021-07-2和68拼起来也是2021-07-268,会造成识别的区域包含了非目标区域。解决方案就是在拼接中间加入一个分隔符,比如:MATCH(A2&“|”&B$2:B$11, A$2:A$11&“|”&B$2:B$11, 0)

  1. 然后ROW($1:$10)这里是提供数据的行数序列,有新增数据的时候要手动改这里。用第一步得到的列表,跟这个序列做一个匹配判断,如下 ,只有1和3和4匹配出来。通过match的特性和这个连续不重复序列的匹配,达到了去重的效果,比如这里面2个10,就只会取到第1个。由此得到一个{TRUE,FALSE,TRUE,TRUE,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A}的列表。
  2. 然后再跟B列相乘,得到了10,8,7三个值,然后再跟B4的8进行比较,B4<={10,8,7},得到2个TRUE,1个FALSE。0除之后得到2个0,1个错误值。最后用Count统计,就得到2。

    不过这种方法也有一个麻烦的地方就是,当新增数据后,整列的公式都要改,因为用美分号锁定了计算区域。

【excel】分组连续排名和不连续排名公式相关推荐

  1. 如何在Excel中分组排名?两个公式轻松搞定!

    点赞再看,养成习惯:桃李不言,下自成蹊. 微信搜索[亦心Excel]关注这个不一样的自媒体人. 本文 GitHub https://github.com/hugogoos/Excel 已收录,包含Ex ...

  2. Excel排名---万能排名公式生成工具,支持 运算后排名,中国式排名,多条件排名

    Excel运算后排名,中国式排名,多条件排名公式如何写 Excel多条件排名往往困扰很多人,Rank往往解决不了多条件排名或中国式排名(重复的不多占名次)的问题.Rank的用法如下: =RANK(F2 ...

  3. mysql 怎么实现组内排名_MySQL 实现排名(分组排名)

    在MYSQL的最新版本MYSQL8已经支持了排名函数RANK,DENSE_RANK和ROW_NUMBER.但是在5.*版本中还不支持这些函数,只能自己实现.实现方法主要用到了条件判断语句(CASE W ...

  4. 【成绩统计】Excel计算年级学校排名和班级排名,并统计各班各科前1050名学生人数

    本文以"好分数"系统导出的期末考试成绩数据为基础,进行统计分析. 拿到表,首先整理下数据,去除无关字段数据,保留关键字段. 一开始的时候,,小编直接使用上表给出的"学校排 ...

  5. 计算机一级表格函数公式,计算机一级:《Excel表格的基本操作》函数和公式编辑技巧...

    Excel 是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理.统计分析和辅助决策操作,广泛地应用于管理.统计财经.金融等众多领域.下文是为大家精选的计算机一级:<Excel表格的 ...

  6. 美国北亚利桑那大学计算机专业排名,北亚利桑那大学排名 综合排名和专业排名介绍...

    北亚利桑那大学(Northern Arizona University)成立于1899年,位于亚利桑那州的弗拉格斯塔夫市,是美国知名的综合性大学,今天就从综合排名和专业排名两大方面给大家介绍一下美国北 ...

  7. 本科广东省计算机学校排名,中山大学南方学院排名2021 广东排名第6全国排名第13...

    中山大学南方学院排名2019 广东排名第6全国排名第13 每年的大学排名位次争议很大,虽然各大学校长口头上称不在乎.不看重,但实际上却卯足干劲,希望学校排名靠前,因为大学排名一定程度上体现了高校的办学 ...

  8. 网站排名算法——Reddit 排名算法工作原理

    Reddit是个社交新闻站点,其口号是"提前于新闻发生,来自互联网的声音".用户(也叫redditors)能够浏览并且可以提交互联网上内容的链接或发布自己的原创帖子.其他的用户可对 ...

  9. 使用selenium爬取QS世界大学综合排名与学科排名数据

    一.概述: 总共有56个学科排名,5个是"BROAD SUBJECT AREA",还有51个是"SPECIFIC SUBJECT",下面是代码的实现.每次启动的 ...

最新文章

  1. PAT Advanced Level 1010
  2. 玩Android的第一天
  3. 消息队列 策略_消息队列技术点梳理(思维导图版)
  4. TwoSum,从O(n^2)到O(nlogn)再到O(n)
  5. proxifier代理失败原因_上海财务代理
  6. 【Vue实例四】利用Vue组件实现添加评论的功能
  7. 降低成本是永恒的追求(xamarin)
  8. linux虚拟机cpu高耗gc,Tomcat服务器-并发压力测试下调优注意点小结 JVM client模式和Server模式的区别 jvm 参数优化---笔记 tomcat查看GC信息...
  9. 被除数是负数的话,为啥要加上偏移量?
  10. 计算机三级数据库技术笔记
  11. 浅谈(Java)AIO-异步IO
  12. 显著性分析-秩和检验与校正
  13. 数学原理(The Principles of Mathmatics)
  14. windows系统电脑间互传文件
  15. 借着谈转正感想的时机,再聊聊外企和互联网公司的工作体验
  16. c语言初级小游戏 · 闯关小鸟 | 激发你的编程兴趣(115行左右代码)
  17. CORDIC算法计算复数相位角(含verilog源码)
  18. 【Excel从头开始】-1 Excel基础设置
  19. Java之数字字符串排序
  20. 超融合和服务器关系_超融合架构是什么,与传统融合架构有那些区别?

热门文章

  1. C语言实现标准正态分布函数和0-1均匀分布函数
  2. Fixed There was a problem with the editor 'vi'
  3. Ubuntu 18.04 微信不显示托盘图标
  4. hive的udf,过滤表情等非法字符
  5. U盘、FTP等传统文件摆渡方式的7大弊端 你入坑了吗?
  6. gpu 测试 linux,如何在Linux上对GPU进行基准测试
  7. 伯努利分布、二项分布、Beta分布、多项分布和Dirichlet分布与他们之间的关系,以及在LDA中的应用
  8. “拷贝中国”已成硅谷创业趋势
  9. Dreamweaver CS4序列号
  10. 李群与李代数1:对应关系及指数/对数映射