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

阅读(1282) 标签: 游标, 相邻分组聚合, 原游标,

描述:

游标中附加相邻值分组聚合动作后返回原游标。

语法:

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

备注:

游标cs附加计算,cs根据x分组后计算聚合表达式yx为字段F的值y为字段G的值, 形成以F,... G,为字段的序表返回到原游标cs。支持多路游标。

csx有序,x只和相邻的记录对比,结果集不再排序。

该函数属于延迟计算函数。

参数:

cs

游标。

x

分组表达式。

F

字段名。

G

汇总字段名。

y

聚合表达式。

选项:

@s

用累积方式聚合。

@q(x:F,…;x’:F’,…; y:G,…)

cs已对x,…有序,仅后面的字段需要排序时可用该选项,可以内存排序。

@sq(x:F,…;x’:F’,…; y:G,…)

没有y:G参数时仅排序,不分组;有y:G参数时按累计方式聚合。该用法中@s必须与@q配合使用。

@e

y的结果组成的序表返回到原游标。其中xcs的字段名,ycs的函数,y的计算结果要求是cs的一条记录,当y是聚合函数时仅支持maxp/minp/top@1

组合使用@sev选项时,返回结果为纯序表。

返回值:

游标

示例:

 

A

 

1

=demo.cursor("select * from SCORES").sortx(CLASS,STUDENTID)

返回游标,游标内容对CLASS,STUDENTID有序,数据内容如下:

2

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

游标A1附加计算,根据CLASS,STUDENTID相邻值分组,汇总每组的SCORE值,汇总结果作为TotalScore字段值,返回原游标cs

3

=A1.fetch()

读取游标A1执行A2计算后的数据:

使用@q选项:

 

A

 

1

=demo.cursor("select EID,NAME,DEPT,GENDER,SALARY from EMPLOYEE ").sortx(DEPT)

返回游标,游标内容对DEPT有序,数据内容如下:

2

=A1.group@q(DEPT;GENDER;~.avg(SALARY):Avg_Salary)

游标A1附加计算,游标对DEPT有序,仅GENDER字段需要排序,使用@q选项进行内存排序,返回原游标cs

3

=A1.fetch()

读取游标A1执行A2计算后的数据:

  使用@sq选项,无需汇总仅排序时: 

 

A

 

1

=demo.cursor("select EID,NAME,DEPT,GENDER,SALARY from EMPLOYEE ").sortx(DEPT)

返回游标,游标内容对DEPT有序,数据内容如下:

2

=A1.group@sq(DEPT;GENDER)

游标A1附加计算,游标仅对DEPT有序,且省略汇总聚合参数,使用@sq选项仅排序不分组,返回原游标cs

3

=A1.fetch()

读取游标A1执行A2计算后的数据:

使用@e选项,将y的结果组成的序表返回到原游标:

 

A

 

1

=demo.cursor("select EID,NAME,DEPT,SALARY from EMPLOYEE  ").sortx(DEPT)

返回游标,游标内容对DEPT有序。

2

=A1.group@e(DEPT;~.maxp(SALARY))

游标A1附加计算,使用@e选项,将maxp(SALARY)结果记录返回到原游标。

3

=A1.fetch()

读取游标A1执行A2计算后的数据: