描述:
采用累计方式对序表分组聚合计算。
语法:
A.groups(x:F,…;y:G,…)
备注:
将序表按照一个或多个字段/表达式进行分组聚合后,形成以F,... G,…为字段的新序表。对A的成员遍历,依次向对应结果集累计计算,相比先分组再聚合的方式,性能更优。
选项:
@o |
只和相邻的对比,相当于归并,结果集不再排序 |
@n |
x取值为分组序号,可直接定位,与@o互斥 |
@u |
结果集不再按x排序;与@o/@n互斥 |
@i |
x是bool表达式,如果x的结果为true则开始新的一组。此时只有一个x。 |
@m |
数据量大的复杂运算中并行计算提升性能,计算次序不确定,与@oi互斥。 |
@0 |
使x的计算结果为空的组丢弃 |
@h |
用于分段有序的数据,可提高分组效率 |
参数:
A |
序列 |
x |
分组表达式 |
F |
结果序表的字段名 |
G |
结果序表中的汇总字段名 |
y |
y是A的聚合函数,仅支持sum/count/max/min/top/avg/iterate/icount/median,使用iterate(x,a;Gi,…)时不能有参数Gi。 |
返回值:
分组后的序表
示例:
|
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选项提高分组效率 |
注意:
A.groups(x:F,…;y:G,…)和A.group(x:F,…;y:G,…)的区别:A.groups(x:F,…;y:G,…)是用累计方式计算,性能更好。
相关概念: