描述:
序列成员计算表达式后获取前n个值组成的序列。
语法:
| A.top(n,x) | 针对序列A的成员计算表达式x后排序,返回前n个x值组成的序列。 | 
| A.top(n;x,...) | 针对序列A的成员计算表达式x,…后排序,返回前n个A成员组成的序列。 | 
| A.top(n,y,x) | 针对序列A的成员先计算表达式x,再对x结果值进行y计算,然后根据y值对x排序,获取前n个x值组成的序列。 | 
备注:
针对序列的每个成员计算表达式,排序后返回前n个值组成的序列。
序列存在重复成员时,默认采用连续排名方式。
n>0时取前n个最小值,n<0时取前n个最大值,n为0时返回null,n不可省略,x省略解释为~。
参数:
| A | 序列。 | 
| n | 整数。 | 
| y | 表达式。 | 
| x | 表达式。 | 
选项:
| @1 | n为±1时返回单值。 | 
| @0 | 不忽略null,缺省忽略null。 | 
| @r | 采用美式排序,即并列名次占用名次。 | 
| @i | 采用中式排序,即并列名次不占用名次。 | 
序列
示例:
使用A.top(n,x):
| 
 | A | 
 | 
| 1 | =connect("demo").query("select top 10 NAME,SALARY from employee") | 返回序表: 
 | 
| 2 | =A1.top(3,SALARY+500) | 将序表根据SALARY+500计算后的结果值排序,取前3个最小计算值组成的序列: 
 | 
| 3 | =A1.top(-3,SALARY) | 将序表根据SALARY排序,n<0,取前3个最大SALARY值组成的序列: 
 | 
| 4 | =[2,6,4,12,6,5,2].top(4) | 参数x缺省为~,返回结果为: 
 | 
使用A.top(n;x,…):
| 
 | A | 
 | 
| 1 | =connect("demo").query("select top 10 NAME,SALARY from employee") | 返回序表: 
 | 
| 2 | =A1.top(3;SALARY+500) | 将序表根据SALARY+500计算后的结果值排序,取前3个最小计算值对应的序表成员组成的序列: 
 | 
| 3 | =A1.top(-6;DEPT,SALARY) | 将序表根据DEPT,SALARY排序后,取前6个最大值对应的序表成员组成的序列: 
 | 
使用A.top(n,y,x):
| 
 | A | 
 | 
| 1 | [21,3,12,5] | 
 | 
| 2 | =A1.top(3,~%10,~+6) | 先对序列计算表达式x: ~+6,此时x结果为[27,9,18,11],然后再对x计算表达式y: ~%10,此时y结果为[7,9,8,1],结果返回前3个最小y值对应的x值组成的序列,返回结果如下: 
 | 
| 3 | =A1.top(-3,~%10,~+6) | n为-3,返回前3个最大y值对应的x值组成的序列,返回结果如下: 
 | 
使用@1选项,n为±1时返回单值:
| 
 | A | 
 | 
| 1 | =[2,6,4,12,6,5] | 
 | 
| 2 | =A1.top(1) | 返回前1个最小值组成的序列: 
 | 
| 3 | =A1.top@1(1) | 使用@1选项,n为1则返回序列成员的最小值: 
 | 
| 4 | =A1.top@1(-1) | 使用@1选项,n为-1则返回序列成员的最大值: 
 | 
使用@0选项,不忽略null:
| 
 | A | 
 | 
| 1 | =[5,7,2,null,3] | 
 | 
| 2 | =A1.top(3) | 取序列中前3个最小成员值,默认忽略null: 
 | 
| 3 | =A1.top@0(3) | 使用@0选项,不忽略null: 
 | 
使用@r/@i选项,对于序列中存在重复成员时排序方式不同:
| 
 | A | 
 | 
| 1 | [a,b,e,b,d,a,c,c,b] | 返回存在重复成员的序列。 | 
| 2 | =A1.top(3) | 默认采用连续排名方式,取前三个最小值: 
 | 
| 3 | =A1.top@r(3) | 使用@r选项,采用美式排名,即并列名次占用名次,相当于排序后名次为[1,1,3,3,3,6,6,8,9],返回结果如下: 
 | 
| 4 | =A1.top@i(3) | 使用@r选项,采用中式排名,即并列名次不占用名次,相当于排序后名次为[1,1,2,2,2,3,3,4,5] ,返回结果如下: 
 | 
相关概念: