描述:
对序列先分组再聚合。
语法:
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) |
以累计方式计算:
|
相关概念: