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

阅读(758) 标签: 序列, 分组, 聚合,

描述:

对序列先分组再聚合

语法:

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

备注:

将序列按照一个或多个字段/表达式先进行分组,然后再进行聚合运算。按照x分组后,形成以F,... G,…为字段的新序表。F字段值为每一组第一条记录的x字段值,G字段值为对每一组进行y操作后的结果。

选项:

@o

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

@n

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

@u

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

@i

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

@0

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

@h

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

参数:

A

序列

x

分组表达式,x:F省略则不分组针对全集聚合,此时不可省略

F

结果序表的字段名

G

结果序表中的汇总字段名

y

聚合表达式,用~引用组

返回值:

序列

示例:

 

A

 

1

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

 

2

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

3

=A1.group@o(STUDENTID:StudentID;~.sum(SCORE):TotalScore)

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

4

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

 

5

=A4.group@n(if(STOCKID=="000062",1,2):StockID;~.sum(CLOSING):TotalPrice)

x取值为分组序号

6

=A1.group(;~.sum(SCORE):TotalScore)

省略x:F求所有学生的总成绩

7

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

 

8

=A7.group@u(STATE:State;~.count(STATE):TotalScore)

结果集不按分组字段排序

9

=A7.group@i((GENDER=="F"):IsF;~.count():Number)

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

10

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

11

=A10.group@0(Gender:Gender;~.sum(Age):Total)

Gender为空的组丢弃

12

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

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

13

=A12.group@h(DEPT:dept;~.sum(SALARY):bouns)

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

相关概念:

A.id()

A.group(xi,…)