-
-
小灰灰1 数据达人Lv4
发表于2020-7-21 09:05
悬赏1
已解决

我想到的一个办法是用rank排序,但是rank都是重复排名,_rk是会改变结果顺序,这两个方法感觉都行不通
还有其他方法可以实现这个求前三名的效果么?
9个回答
本帖最后由 小灰灰1 于 2020-7-21 09:51 编辑
xxxl 发表于 2020-7-21 09:42
分值一样不应该就是并排吗,如果分值一样还不是并排排名是否不够客观呢
先不要管是否客观,问题在于我如何取出来一个数组的前三个最大值如果数据是 1 3 4 4 5
那么我需要的值就是 5 4 4,按照出现的先后顺序算,这个就是类似于不重复排名呀
那不重复排名也不能保证客观公正呀,也是谁在前面谁就是第一,相同成绩在后面也是第二
xxxl 发表于 2020-7-21 09:42
分值一样不应该就是并排吗,如果分值一样还不是并排排名是否不够客观呢
大哥,能否咨询下您的大神同事们,看下是否有其他方法实现这种需求?
_rk肯定是不行的,它的语法规则就不支持我这个需求,因为_rk只支持指标字段的,我这里是计算后的单元格了,这种表元的方式是不支持rk函数的
用数组的形式来获取 类似:b1$.sort()[0].value 代表这个数组中最大的值。以此类推
郑文华 发表于 2020-7-21 10:34
用数组的形式来获取 类似:b1$.sort()[0].value 代表这个数组中最大的值。以此类推 ...
这个方法可以获取到最大值,厉害
再咨询个问题哈,B3$[G3$.FIND("1")] 我想结合这个方法取其他单元格符合条件的值,但是我如果直接拼到一起,获取到的结果不对:B3$[K3$.FIND(K3$.sort()[0].value)],是我语法有问题么?没有提示错误
本帖最后由 yangqh 于 2020-7-21 10:56 编辑
前三名一起取:比如名次变化列是K列,字号列是B列,K2$.sort().mid(0,3).select(true,@.leftcell(9).txt).join(",")
yangqh 发表于 2020-7-21 10:55
前三名一起取:比如名次变化列是K列,字号列是B列,K2$.sort().mid(0,3).select(true,@.leftcell(9).txt).j ...
.sort是将K2浮动出来的数据降序排序,mid(0,3)是取排序后的前三项(即前三名),select的作用的取这前三名对应的B2表元的值(字号列),join是吧前面返回的结果用逗号隔开转成字符串
yangqh 发表于 2020-7-21 10:58
.sort是将K2浮动出来的数据降序排序,mid(0,3)是取排序后的前三项(即前三名),select的作用的取这前三 ...
厉害,牛批
再问下哈,@.leftcell(9).txt这部分的语法规则说明有文档么?我没搜到leftcell函数的语法
本帖最后由 xxxl 于 2020-7-21 11:40 编辑
小灰灰1 发表于 2020-7-21 11:09
厉害,牛批
再问下哈,@.leftcell(9).txt这部分的语法规则说明有文档么?我没搜到leftcell函数的语法 ...
leftcell表示取左边的表元,这是表元对象cell中的函数
leftcell(int i)返回左边的第i个表元;如果没有,则返回null。
如果参数为负数,则等价于rightcell(-i)
Self.Leftcell(1)等于self.leftcell
Self.leftcell(5)是self左边的第5个表元
Self.leftcell(-5)返回null
Rightcell(int i)
返回右边的第i个元素;如果没有,则返回null。
如果参数为负数,则等价于leftcell(-i)
Self.rightcell(1)等于self.rigthcell
Upcell(int i)
返回上面的第i个元素;如果没有,则返回null。
如果参数为负数,则等价于downcell(-i)
Self.Upcell (1)等于self.Upcell
Downcell(int i)
返回下面的第i个元素;如果没有,则返回null。
如果参数为负数,则等价于upcell(-i)
Self.Downcell(1)等于self.Downcell
这里有用到数组对象的方法来进行取值这里用的select、find等都有,参考这个帖子http://bbs.esensoft.com/thread-133624-1-1.html