本章介绍rank()函数的多种用法。
描述:
计算指定值在序列成员中的排名。
语法:
备注:
对着序列A逐条记录计算表达式x的值,返回y在序列A.(x)中的排名。默认为升序排名。
选项:
@z |
降序排名。 |
@i |
去掉重复成员后再计算排名。 |
@s |
有重复成员时先对其排名做均值计算,再计算排名,返回值存在非整数的情况。 |
参数:
A |
序列。 |
x |
|
y |
参与排名的值。 |
返回值:
数值
示例:
A为序列:
|
A |
|
1 |
=[2,1,3,4,8,5,2,0] |
|
2 |
=A1.rank(6) |
返回8,计算6在序列A1中的升序排名。 |
3 |
=A1.rank@z(6) |
返回2,计算6在序列A1中的降序排名。 |
4 |
=A1.rank@i(6) |
返回7,先去掉重复成员,然后再计算6在序列A1中的升序排名。 |
5 |
=A1.rank@s(2) |
返回3.5,使用@s选项,先对重复成员的排名做均值运算,再计算排名,即:序列A1的成员值2的排名分别为3、4,均值运算结果为(3+4)/2=3.5,所以2在序列中的排名为3.5。 |
6 |
=A1.rank(6,~+3) |
返回5,先对序列计算表达式后,再计算6在其中排名。 |
A为序表/排列:
|
A |
|
1 |
=demo.query("select * from SCORES where SUBJECT='English'").sort(SCORE:-1) |
|
2 |
=A1.rank@z(90,SCORE) |
计算90在序列A1的SCORE中的降序排名,结果返回5。 |
3 |
=A1.rank@iz(90,SCORE) |
去除序列A1中的重复SCORE值后,计算90在其中的降序排名,结果返回3。 |
4 |
=A1.rank@sz(90,SCORE) |
先对SCORE的重复值做均值运算,然后再计算排名,结果返回5.5。 |
循环函数中迭代运算,对有相同字段值的成员统一编号。
语法:
rank(F;Gi,…)
备注:
用于循环函数中,如果Gi字段值相同则对F字段值相同的成员的从1开始编号,F字段值相同的编号相同,当F字段值发生变化时下一个F字段值的编号变为上一个F字段值的编号加上上一个F字段相同值的个数。如果Gi字段值发生变化,则重复上述运算。注意,该函数没有排序功能。
参数:
F |
字段名。 |
Gi |
字段名。 |
返回值:
整数
示例:
|
A |
|
1 |
=demo.query("select SUBJECT,STUDENTID,SCORE from SCORES where CLASS='Class one' order by SUBJECT,SCORE desc") |
查询班级为Class one的学生成绩,根据SUBJECT升序同时根据SCORE降序排序。 |
2 |
=A1.derive(rank(SCORE;SUBJECT): RANKING) |
获取单科成绩排名次序,分数相同则名次相同,并列成绩占用名次,结果值保存在RANKING字段中。
|