T.groups()

阅读(159) 标签: 虚表, 分组,

描述:

针对虚表中的记录分组。

语法:

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的平均值,结果返回序表,结果序表中的字段名称有deptAVG_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

=A2.groups@o(DEPT:dept;avg(SALARY):AVG_SALARY)

使用@o,只和相邻对比,结果集不排序:

7

=A2.groups@i(GENDER=="M":isMAN;count(EID):Count)

遇到GENDER=="M"则开始新的分组:

8

=A2.groups@b(DEPT:dept;avg(SALARY):AVG_SALARY)

使用@b选项,结果集中只有聚合数据列,无分组数据列: