针对虚表中的记录分组。
语法:
T. groups(x:F,…;y:G…;n)
备注:
针对虚中的记录分组。按分组字段排序,依次向结果集聚合。
按照x分组后,返回以F,...G,…为字段的序表;序表按分组表达式x排序,G字段值为对每一组执行聚合函数y后的结果。
选项:
@n |
x取值为分组序号,可直接定位,n为事先设定的总组数,可以直接先生成空间。 |
@u |
结果集不再按x排序;与@n互斥。 |
@o |
只和相邻的对比,相当于归并,结果集不再排序。 |
@i |
x是布尔表达式,如果x的结果为true则开始新的一组。此时只有一个x。 |
@h |
用于分段有序的数据,可提高分组效率。 |
@b |
返回的结果集中只有聚合数据,没有分组列数据。 |
@v |
组表第一次加载时用列式,提升性能。 |
参数:
T |
虚表。 |
x |
分组表达式,x:F省略表示针对全集聚合,此时;不可省略。 |
F |
结果序表的字段名。 |
y |
聚合函数,仅支持sum/count/max/min/top/avg/iterate/concat/var,使用iterate(x,a;Gi,…)时不能有参数Gi。 |
G |
结果序表中的汇总字段名。 |
n |
最大分组数,超过n时停止执行,用于分组数非常大时,防止内存溢出。并且最后的分组数不是确切数n,可能会比n大一些。 |
返回值:
虚表
示例:
|
A |
|
1 |
=create(file).record(["D:/file/pseudo/empT.ctx"]) |
|
2 |
=pseudo(A1) |
生成虚表。 |
3 |
=A2.groups(DEPT:dept;avg(SALARY):AVG_SALARY) |
将虚表记录分组,分组字段为DEPT,聚合方式为计算每组SALARY的平均值,结果返回序表,结果序表中的字段名称有dept、AVG_SALARY,结果根据dept排序: |
4 |
=A2.groups@n(if(GENDER=="F",1,2):GenderGroup;avg(SALARY):AVG_SALARY) |
将虚表记录根据GENDER是否为F分为两组,并计算每组的SALARY平均值: |
5 |
=A2.groups@u(DEPT:dept;avg(SALARY):AVG_SALARY) |
使用@u,分组结果不排序: |
6 |
使用@o,只和相邻对比,结果集不排序: |
|
7 |
=A2.groups@i(GENDER=="M":isMAN;count(EID):Count) |
遇到GENDER=="M"则开始新的分组: |
8 |
=A2.groups@b(DEPT:dept;avg(SALARY):AVG_SALARY) |
使用@b选项,结果集中只有聚合数据列,无分组数据列: |