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 |
… | … | … | … |
这里 top 函数只能得出对应字段的值,不能选出整条记录吧
请看函数文档,文档里啥都有😂
注意观察逗号和分号返回的结果形式:
https://d.raqsoft.com.cn:6443/esproc/func/top1.html
多谢!文档我看过了,我指的是在 group 里就不能这样应用了,对吧。
能用,top 也是聚合函数。请再看 group/groups 函数文档😂
再不行就举例,老夫还没碰到过搞不定的。😂
我是想在 excel 中实现。=spl(“=E(?).groups(年级;top(-2; 总成绩):TOP2)”,A1:H47) 这个公式不能将结果展开。
TOP2 列显示 [com.scudata.dm.Record@72906e,com.scudata.dm.Record@5529ff44]。
我知道这一列每个值都是序列,如:【A,B,C,D】,但不知道如何展开。
只能用 =spl(“=(E(?).sort@z(总成绩).group(年级).(~.to(2)).conj())”,A1:H47) 这种方法。
供参考…
=spl(“=E(?).groups(年级;top(-2; 总成绩):TOP2).conj(TOP2)”,A1:H47)
或者
=spl(“=E(?).group(年级).conj(~.top(-2; 总成绩))”,A1:H47)
感谢,现在有点理解 conj() 的用法了