3.3.2记录排序

我们在数据计算中同样经常需要将数据表中的记录按需要排序。如:

 

A

1

=demo.query("select EID,NAME,SURNAME,GENDER,

BIRTHDAY from EMPLOYEE where EID<6")

2

=A1.sort(NAME+" "+SURNAME)

3

=A1.sort(BIRTHDAY)

4

=A1.sort@z(age(BIRTHDAY))

A1中取出了部分员工的资料如下:

A2中将记录按照员工全名排序,结果如下:

A3中根据生日将记录排序,结果如下:

A4中根据年龄将记录降序排序,结果如下:

可以发现,使用sort函数,可以很方便地将序表或排列中的记录按需要排序,生成排列后返回。

 

我们来看A2中的结果,排序的结果是按照全名处理的,但是我们往往需要先将员工资料按照姓排名,同姓的再按照名字排序。这时,需要使用多字段排序:

 

A

1

=demo.query("select EID,NAME,SURNAME,GENDER,

BIRTHDAY from EMPLOYEE")

2

=A1.sort(SURNAME,NAME)

3

=A1.sort(GENDER,-SURNAME,-NAME)

这里,A1中取出所有员工的资料如下:

A2中,先根据SURNAME排序,再根据NAME排序,结果如下:

在上一节的内容中,我们了解到在使用sort,psort,rank,ranks等函数,可以添加@z选项来调整排序顺序。在用sort函数执行多字段排序时,由于各个字段的排序顺序不一定相同,因此不能使用@z选项,但可以在需要逆序排序的表达式前添加负号。如A3中的表达式,GENDER表示按性别升序排序,-SURNAME表示按姓降序排序,如果未添加标记,则表示升序排序。A3中的排序结果如下:

在将记录排序时,如果使用了非英文字符串,也可以在sort函数中添加语言参数。

在将序表中的记录排序时,有时我们只需要得到排在前几位的数据,此时可以使用top函数或者ptop函数。如:

 

A

1

=demo.query("select EID,NAME,SURNAME,GENDER,

BIRTHDAY from EMPLOYEE")

2

=A1.top(5,age(BIRTHDAY))

3

=A1.ptop(5,age(BIRTHDAY))

4

=A1.top(5,age(BIRTHDAY),~)

5

=A1.top(-5,age(BIRTHDAY))

A2中用top函数计算出最小的5个年龄,A3中用ptop函数计算出年龄最小的5位员工的序号。A4中用top函数取出年龄最小的5位员工数据,其中第3个参数~表示返回A1中的原记录。 A2,A3A4中结果如下:

   

topptop函数中,不能使用@z选项,如果需要计算最大的5个年龄,可以在函数参数中使用负数,如A5中的-5表示取出年龄最大的5个数据,结果如下: