1.15 分组:组内筛选前 N 名 / 后 N 名不产生子集
使用 groups() 函数分组,采用累计方式计算,过程中不产生子集。这种运算方式效率更高,如果分组子集不需要复用,建议采取这种运算方式。
以雇员表为例,求每个部门薪水前三高的员工信息。
EID | NAME | DEPT | SALARY |
---|---|---|---|
1 | Rebecca | R&D | 7000 |
2 | Ashley | Finance | 11000 |
3 | Rachel | Sales | 9000 |
4 | Emily | HR | 7000 |
5 | Ryan | R&D | 13000 |
… | … | … | … |
脚本:
A | |
---|---|
1 | =connect(“db”) |
2 | =A1.query@x(“select * from EMPLOYEE”) |
3 | =A2.groups(DEPT; top(-3;SALARY):TopSalary) |
4 | =A3.(TopSalary).conj() |
A1 连接数据库
A2 查询雇员表
A3 按部门分组并取出每组薪水前三的记录
A4 把各部门薪水前三的记录合并
运行结果:
EID | NAME | DEPT | SALARY |
---|---|---|---|
20 | Alexis | Administration | 16000 |
42 | Michael | Administration | 12000 |
18 | Jonathan | Administration | 7000 |
2 | Ashley | Finance | 11000 |
32 | Andrew | Finance | 11000 |
… | … | … | … |