A.groups()

阅读(1701) 标签: 累计, 序表, 分组聚合,

描述:

采用累计方式对序表分组聚合。

语法:

A.groups(x:F,…;y:G,…)

备注:

将序表A按照表达式x分组聚合后,形成以F,... G,…为字段的新序表。对A的成员遍历,依次向对应结果集累计,相比先分组再聚合的方式,即函数A.group(x:F,…;y:G,…),性能更优。

选项:

@o

只和相邻对比,相当于归并,结果集不再排序。

@n

x取值为分组序号,可直接定位,与@o互斥。

@u

结果集不再按x排序;与@o/@n互斥。

@i

x是布尔表达式,如果x的结果为true则开始新的一组。此时只有一个x

@m

数据量大的复杂运算中,并行计算提升性能,计算次序不确定,与@o/@i互斥。

@0

丢弃x的计算结果为空的组。

@h

用于分段有序的数据,可提高分组效率。

@t

A的返回值为空,则返回一个保留数据结构的空序表。

@z(…;…)

并行计算时按分组拆分,多线程共享结果集。

@e

返回y的结果组成的序表。其中xA的字段名,yA的函数,y的计算结果要求是A的一条记录,当y是聚合函数时仅支持maxp/minp/top@1

参数:

A

序列。

x

分组表达式。

F

结果序表的字段名。

G

结果序表中的汇总字段名。

y

yA的函数。当y为聚合函数时:仅支持sum/count/max/min/top/avg/iterate/icount/median/maxp/minp/concat/var,使用iterate(x,a;Gi,…)时不能有参数Gi。当y为非聚合函数时:只对每组第1条计算。

返回值:

分组后的序表

示例:

 

A

 

1

=demo.query("select * from SCORES where CLASS = 'Class one'")

2

=A1.groups(STUDENTID:StudentID;sum(SCORE):TotalScore)

单字段分组。

3

=demo.query("select * from SCORES")

 

4

=A3.groups(CLASS:Class,STUDENTID:StudentID;sum(SCORE):TotalScore)

多字段分组。

5

=A3.groups@m(STUDENTID:StudentID;sum(SCORE):TotalScore)

数据量大时提升性能。

6

=A3.groups@o(STUDENTID:StudentID;sum(SCORE):TotalScore)

只和相邻的对比归并,结果集不排序。

7

=demo.query("select * from STOCKRECORDS where STOCKID<'002242'")

 

8

=A7.groups@n(if(STOCKID=="000062",1,2):StockID;sum(CLOSING):TotalPrice)

x取值为分组序号。

9

=demo.query("select * from EMPLOYEE")

 

10

=A9.groups@u(STATE:State;count(STATE):TotalScore)

结果集不按分组字段排序。

11

=A9.groups@i(STATE=="California":IsCalifornia;count(STATE):count)

遇到STATE=="California"则开始新的分组。

12

=A3.groups(CLASS:Class,STUDENTID:StudentID;iterate(~~*2,10): Score1)

分组的每组内进行iterate运算。

13

=file("D:\\Salesman.txt").import@t()

14

=A13.groups@0(Gender:Gender;sum(Age):Total)

丢弃Gender为空的组。

15

=file("D:/emp10.txt").import@t()

数据文件emp10.txt中,每10条数据根据DEPT进行了一次排序:

16

=A15.groups@h(DEPT:dept;sum(SALARY):bouns)

A15是以DEPT分段有序的数据,使用@h选项提高分组效率:

17

=A1.groups(STUDENTID:StudentID;SUBJECT,sum(SCORE):SUMSCORE)

非聚合函数计算第一条数据:

18

=demo.query("select * from SCORES where CLASS = 'Class three'")

返回空序表。

19

=A18.groups@t(STUDENTID:StudentID;sum(SCORE):TotalScore)

返回保留数据结构的空序表。

 

 

A

 

1

=demo.query("select * from SCORES")

 

2

=A1.groups@z(STUDENTID:StudentID;sum(SCORE):TotalScore)

并行计算时按组拆分。

 

 

A

 

1

=demo.query("select EID,NAME,GENDER,DEPT,SALARY from employee")

 

2

=A1.groups(DEPT;minp(SALARY))

执行聚合函数minp()后返回A3的记录。

3

=A1.groups@e(DEPT;minp(SALARY))

返回由minp(SALARY)结果记录构成的序表。

相关概念:

A.group(xi,…)

A.group(x:F,…;y:G,…)