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

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

描述:

对序列先分组再聚合。

语法:

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

备注:

将序列按照一个或多个字段/表达式分组,然后再聚合。按照x分组后,形成以F,... G,…为字段的新序表。新序表按分组表达式x排序,G字段值为对每一组执行聚合函数y后的结果。

选项:

@o

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

@n

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

@u

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

@i

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

@0

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

@h

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

@t

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

@s

以累计方式计算。

参数:

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选项提高分组效率:

14

=demo.query("select * from EMPLOYEE where EID > 500")

返回空序表。

15

=A14.group@t(STATE:State;~.count(STATE):TotalScore)

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

16

=demo.query("select * from employee").group@s(DEPT;sum(SALARY):TotleSalary)

以累计方式计算:

相关概念:

A.id()

A.group(xi,…)