1.14 分组:组内筛选前 N 名 / 后 N 名

 

使用 group() 函数分组,将分组子集保留下来,再对分组子集进行聚合运算。这种运算方式的优点是分组子集可以保留下来,如果需要对分组子集重复使用,或者进行一些复杂的运算,可以采用此方式。

在成绩表中,查询各班每科成绩前两名的学生 ID。

CLASS STUDENTID SUBJECT SCORE
Class one 1 English 84
Class one 1 Math 77
Class one 1 PE 69
Class one 2 English 81
Class one 2 Math 80

脚本:

A
1 =connect(“db”)
2 =A1.query@x(“select * from Scores”)
3 =A2.group(CLASS,SUBJECT;~.top(-2;SCORE):TOP2)
4 =A3.(TOP2).conj()

A1 连接数据库
A2 查询学生成绩
A3 按班级和学科分组并取出每组分数前两名
A4 将所有班级各科前两名对应的记录合并

A3 返回结果(group 函数分组后产生每个组的子集,此时 topN 是一种聚合运算,对每个子集取前两名。):

CLASS SUBJECT Members
Class one English [[Class one,4,English,96],[Class one,9,English,93]]
Class one Math [[Class one,13,Math,97],[Class one,10,Math,97]]

运行结果:

CLASS STUDENTID SUBJECT SCORE
Class one 4 English 96
Class one 9 English 93
Class one 13 Math 97
Class one 10 Math 97