天天看点

SPL常规数据表运算

1. 过滤

从数据表中筛选出满足条件的记录。

示例:从学生成绩表Students_scores.txt中筛选出10班的学生成绩,文件中第一行是列名,第二行开始是数据,如下图所示。

SPL常规数据表运算
A
1 =T(“E:/txt/Students_scores.txt”).select(CLASS==10)

A1 读取文件中数据,然后选出班级为10的数据记录。T函数会自动根据文件扩展名选用适合的分隔符。

2. 汇总

对数据表中的数据进行汇总。

示例:计算学生成绩表中全体学生的语文平均分、数学最高分、英语总分。

A
1 =T(“E:/txt/Students_scores.txt”)
2 =A1.avg(Chinese)
3 =A1.max(Math)
4 =A1.sum(English)

A1 读取文件中数据,T函数会自动根据文件扩展名选用适合的分隔符。

A2 计算语文平均分

A3 计算数学最高分

A4 计算英语总分

3. 跨列计算

对数据表中的数据进行跨列计算。

示例:计算学生成绩表中每位学生的总分。

A
1 =T(“E:/txt/Students_scores.txt”)
2 =A1.derive(English+Chinese+Math:total_score)

A1 读取文件中数据,T函数会自动根据文件扩展名选用适合的分隔符。

A2 在A1中新增一列total_score,其值为英语、语文、数学3列之和

A2中结果如下:

SPL常规数据表运算

4. 排序

对数据表中的数据进行升/降序排序。

示例:将学生成绩表按照班号升序、总分降序的顺序排列。

A
1 =T(“E:/txt/Students_scores.txt”)
2 =A1.sort(CLASS)
3 =A1.sort(CLASS,-Math)

A1 读取文件中数据,T函数会自动根据文件扩展名选用适合的分隔符。

A2 按班级号升序排列

A3 先按班级号升序排列,班级内再按数学成绩降序排列

5. 分组汇总

对数据表中的数据进行分组汇总。

示例:查询各班的英语最低分、语文最高分、数学总分。

A
1 =T(“E:/txt/Students_scores.txt”)
2 =A1.groups(CLASS;min(English),max(Chinese),sum(Math))

A1 读取文件中数据,T函数会自动根据文件扩展名选用适合的分隔符。

A2 按班级分组,计算各班英语最低分、语文最高分、数学总分

6. 分组后过滤

对数据表中的数据分组汇总后再过滤。

示例:找出英语平均分低于70分的班级。

A
1 =T(“E:/txt/Students_scores.txt”)
2 =A1.groups(CLASS;avg(English):avg_En)
3 =A2.select(avg_En<70)

A1 读取文件中数据,T函数会自动根据文件扩展名选用适合的分隔符。

A2 按班级分组,计算各班英语平均分命名新列名为avg_En

A3 从A2中选出英语平均分低于70的

A3中查询结果如下:

SPL常规数据表运算

7. 关联

7.1 关联计算

对两个数据表中的数据进行关联计算。

示例:销售订单信息和产品信息分别存储在两个Excel文件中,计算各订单的销售额。两个文件数据结构如下图:

SPL常规数据表运算
A
1 =T(“e:/orders/sales.xlsx”)
2 =T(“e:/orders/product.xlsx”).keys(ID)
3 =A1.join(ProductID,A2,Name,Price)
4 =A3.derive(Quantity*Price:amount)

A1 读取销售订单数据

A2 读取产品信息数据,设置ID为主键

A3 将A1按照ProductID与A2中的主键进行关联,同时引入Name、Price列数据

A4 A3中新增一列amount,其值为销售数量Quantity与产品价格Price的积

7.2 关联查询

对两个数据表中的数据进行关联查询。

示例:仍用上节中的2个文件,查询产品价格大于20元的销售订单。

1 =T(“e:/orders/sales.xlsx”)
2 =T(“e:/orders/product.xlsx”).select(Price>20).keys(ID)
3 [email protected](ProductID,A2)

A1 读取销售订单数据

A2 读取产品信息数据,选出价格大于20的产品信息,然后设置ID为主键

A3 将A1按照ProductID与A2中的主键进行关联,选项@i表示在A2中找不到与ProductID匹配的产品ID时,则过滤掉此条记录

7.3 主子查询

对主表与明细表数据进行关联查询

示例:有员工信息表employee.xlsx与员工家庭成员表family.xlsx部分数据如下,请查询家中有70岁以上老人的员工信息。

SPL常规数据表运算
SPL常规数据表运算
A
1 =T("e:/work/employee.xlsx")
2 =T("e:/work/family.xlsx").select(age(Birthday)>=70)
3 =join(A1:employee,Eid;A2:family,Eid)
4 =A3.conj(employee)

A1 读取员工信息数据

A2 读取员工家庭成员数据,选出年龄70以上的成员

A3 将A1与A2按照Eid进行关联过滤,删除不匹配的记录,将A1命名为employee,A2命名为family

A4 取出A3中的employee列,连接为序表

继续阅读