本章介绍groupx()函数的多种用法。
描述:
针对管道中的记录分组并返回管道
语法:
ch.groupx(x:F,…;y:G…)
备注:
按照x分组后,形成以F,...G,…为字段的管道,并按分组字段x排序,F字段值为每一组第一条记录的x字段值,G字段值为对每一组进行y操作后的结果。y是ch的聚合函数。该函数为结果集函数。
选项:
@n |
x取值为分组序号,可直接定位 |
参数:
ch |
管道 |
x |
分组表达式 |
F |
结果序表的字段名 |
y |
聚合函数,仅支持sum/count/max/min/top/iterate,使用iterate(x,a;Gi,…)时不能有参数Gi。 |
G |
结果序表中的汇总字段名 |
返回值:
管道
示例:
|
A |
|
1 |
=demo.cursor("select * from EMPLOYEE ") |
|
2 |
=channel() |
创建管道 |
3 |
=channel() |
创建管道 |
4 |
=A1.push(A2,A3) |
将游标A1中的数据推送到管道A2和A3,此时数据不会立即被推送到管道。 |
5 |
=A2.groupx(DEPT:dept;sum(SALARY):TotalSalary) |
指定字段DEPT分组,并按照指定字段排序 |
6 |
=A3.groupx@n(if(GENDER=="F",1,2):SubGroups;sum(SALARY):TotalSalary) |
x取值为分组序号,GENDER等于“F”的分到第一组,否则分到第二组,并且每个组聚合 |
7 |
=A1.select(month(BIRTHDAY)==2) |
|
8 |
=A7.fetch() |
游标A7添加了计算。 |
9 |
=A2.result() |
结果返回成游标 |
10 |
=A3.result() |
结果返回成游标 |
描述:
针对游标中的记录分组并返回游标
语法:
cs.groupx(x:F,…;y:G…;n)
备注:
按照x分组后,形成以F,...G,…为字段的新游标,并按分组字段x排序,F字段值为每一组第一条记录的x字段值,G字段值为对每一组进行y操作后的结果。y是cs的聚合函数。
选项:
@n |
x取值为分组序号,可直接定位 |
参数:
cs |
游标记录 |
x |
分组表达式 |
F |
结果字段名 |
y |
聚合函数,仅支持sum/count/max/min/top/iterate,使用iterate(x,a;Gi,…)时不能有参数Gi。 |
G |
汇总字段名 |
n |
缓冲区行数,n<1时缓冲区用缺省值的n倍 |
返回值:
游标
示例:
|
A |
|
1 |
=demo.cursor("select * from SCORES where CLASS='Class one'") |
|
2 |
=A1.groupx(STUDENTID:ID;sum(SCORE):Scores).fetch() |
|
3 |
=demo.cursor("select * from FAMILY") |
|
4 |
=A3.groupx@n(if(GENDER=="Male",1,2):ID;sum(AGE):TotalAge).fetch() |
x取值为分组序号,GENDER等于“Male”的分到第一组,否则分到第二组,并且每个组聚合 |
描述:
针对集群游标中的记录分组并返回同分布的集群游标
语法:
cs1.groupx(x:F,…;y:G…;cs2,n)
备注:
针对集群游标cs1,按照x分组后,形成以F,...G,…为字段的集群游标,并按分组字段x排序,F字段值为每一组第一条记录的x字段值,G字段值为对每一组进行y操作后的结果。y是cs1的聚合函数。分组后的集群游标的分布和cs2的分布相同。
选项:
@n |
x取值为分组序号,可直接定位 |
参数:
cs1 |
集群游标 |
x |
分组表达式 |
F |
结果字段名 |
y |
聚合函数,仅支持sum/count/max/min/top/avg/iterate,使用iterate(x,a;Gi,…)时不能有参数Gi。 |
G |
汇总字段名 |
cs2 |
集群文件/集群表/集群游标,无此参数不再分布 |
n |
缓冲区行数 |
返回值:
集群游标
示例:
|
A |
|
1 |
[192.168.31.72:8281, 192.168.31.72:8291] |
打开分布集群文件 |
2 |
=file@z("salespart.ctx", A1) |
|
3 |
=A2.create() |
|
4 |
=A3.cursor() |
返回集群游标,用来定义分布 |
5 |
=file@0z("orderpart.ctx", A1) |
打开分布集群文件 |
6 |
=A5.create() |
|
7 |
=A6.cursor() |
返回集群游标 |
8 |
=A7.groupx(EID:ID;count(~):IdCount; A4) |
按EID对A7进行分组计数并返回和A4同分布的集群游标 |
9 |
=A8.fetch() |
|
10 |
=A7.groupx@n(if(EID==4,1,2):ID;count(~):IdCount; A4) |
x取值为分组序号,EID等于4的分到第一组,否则分到第二组,并且每个组计数 |
11 |
=A10.fetch() |
|