本章介绍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字段中。 
 |