描述:
针对序列的每个成员,按照指定条件生成多条记录,合并组成新的序表。
语法:
A.news(X;xi:Fi,…)
备注:
针对序列A的每个成员,与序列/整数X经过计算表达式xi后生成多条记录,合并组成新的序表。
参数:
A |
序列。 |
X |
序列/整数;X为整数时 可理解为to(X),相当于对A计算了X次。 |
xi |
表达式,结果为字段值,xi中的~针对X而非A。 |
Fi |
结果序表的字段名,缺省为xi,当xi为#i时使用原列名。 |
选项:
@1 |
左连接,当X为空时创建一条空记录。注意是数字1。 |
@m |
并行计算提升性能。 |
@q |
只有一个xi且无F参数,当xi计算结果是序列时,返回成序列的序列。 |
返回值:
序表
示例:
A为序列:
|
A |
|
1 |
[1,2,3,4,5] |
|
2 |
=A1.news([10,20]; A1.~:a,~:b,a*b) |
X为序列时,对A与X的成员逐一进行计算,将A1的成员作为字段a的值,[10,20]的成员作为字段b的值,第3列为a*b的结果值, Fi缺省直接参数xi用作为字段名: |
3 |
=A1.news(2; A1.~:a, ~:b,a*b) |
X为整数时,相当于to(2),依次对A1的成员计算2次: |
A为序表:
|
A |
|
1 |
=demo.query("select top 5 ID,NAME,BIRTHDAY,DEPT,SALARY from EMPLOYEE") |
|
2 |
=A1.news(~;NAME,age(BIRTHDAY):AGE) |
X为序表,~理解为A1,计算A1序表,返回的记录中含有字段NAME、AGE,AGE是根据A1的字段BIRTHDAY计算而来: |
3 |
=A1.news(3;EID,NAME,SALARY*~:Salary) |
X为整数3,对A1的成员分别计算三次,其中~可理解为当前计算次数: |
A为排列:
|
A |
|
1 |
=demo.query("select top 10 EID,NAME,DEPT,GENDER,SALARY from EMPLOYEE") |
|
2 |
=A1.group(DEPT).(~.group(GENDER)) |
对A1序表根据DEPT分组,然后再继续根据GENDER分组: |
3 |
=A2.news(~;A2.~.DEPT,A2.~.~.GENDER,A2.~.~.avg(SALARY):AvgSalary) |
取出A2分组中的DEPT和GENDER值,计算各个DEPT下GENDER的平均工资: |
参数xi中用#i :
|
A |
|
1 |
=demo.query("select top 10 EID,NAME,BIRTHDAY,GENDER,SALARY from EMPLOYEE") |
|
2 |
=A1.group(GENDER;~:GenderGroup,~.avg(SALARY):Avg) |
A1根据GENDER做分组,并计算每组平均工资: |
3 |
=A2.news(GenderGroup;EID,#2,GENDER, age(~.BIRTHDAY):age,SALARY+1000:Nsalary,A2.Avg:AvgSalary) |
针对A2每组计算表达式,生成记录合并成一个新序表,其中#2表示GenderGroup中的第2个字段,即NAME: |
使用@1选项,左连接:
|
A |
|
1 |
=demo.query("select top 5 EID,NAME,BIRTHDAY,GENDER,SALARY from EMPLOYEE") |
|
2 |
=A1.group(GENDER;~:GenderGroup) |
A1根据GENDER对记录做分组: |
3 |
=demo.query("select top 10 EID,NAME,BIRTHDAY,GENDER,SALARY from EMPLOYEE") |
|
4 |
=A3.group(GENDER;avg(SALARY):avg) |
A3根据GENDER分组,计算每组的平均工资: |
5 |
=A4.join(GENDER,A2:GENDER,GenderGroup) |
将A2与A4根据GENDER字段连接,由于A2中没有GENDER为M的对应数据,所以表连接后,对应的GenderGroup字段值为null: |
6 |
=A5.news(GenderGroup;EID,NAME,GENDER,age(~.BIRTHDAY):age,avg:AvgSalary) |
对排列A5计算表达式后生成的记录,默认丢弃GenderGroup为空的记录: |
7 |
=A5.news@1(GenderGroup;EID,NAME,GENDER,age(~.BIRTHDAY):age,avg:AvgSalary) |
使用@1参数,当排列X为空时,创建一条空记录: |
使用@q选项,返回序列的序列:
|
A |
|
1 |
=file("emp.txt").cursor@w().fetch() |
返回内容: |
2 |
=A1.news@q(2;[A1.~(2),A1.~(3)*~]) |
使用@q选项,只有一个xi参数无F参数且xi计算结果为序列,结果返回序列的序列: |
相关概念: