1.4 把枚举字符串变成小整数

将取值可能有限的枚举字符串转换成整数后可以获得更好的存储和计算性能。

1.4.1 转储时转换

将枚举字段用取值序列的序号代替,这里以 ShipVia 举例

A
1 =file(“ShipVia.btx”).import@bi()
2 =file(“Orders.txt”).cursor@mt(CustomerID:string, OrderDate:datetime, ProductID:string, Quantity:int, Unit:string, Price:decimal, Amount:decimal, EmployeeID:int,EmployeeName:string,ShipVia:string).run(OrderDate=days@o(OrderDate), ShipVia=A1.pos@b(ShipVia))
3 =file(“Orders.ctx”).create@y(CustomerID,OrderDate,ProductID, Quantity, Unit, Price, Amount, EmployeeID,EmployeeName,ShipVia)
4 =A3.append(A2)
5 =A3.close()

A1 读入 ShipVia 字段的取值序列,一般在文件中已经排好序了,@i 选项表示读成序列

取值序列也可以直接写在脚本中

A
1 [Federal Shipping,Speedy Express,United Package]

A1 把 ShipVia 转成对应序列中的序号,因为取值序列有序,所以使用 @b 选项

1.4.2 用转换后的数据计算

SQL

SELECT sum(Orders.Quantity) AS Quantity,ShipVia
FROM Orders
WHERE ShipVia='Federal Shipping' or ShipVia='Speedy Express'
GROUP BY ShipVia

SPL

A
1 >arg1=“Federal Shipping”,arg2=“Speedy Express”
2 =file(“ShipVia.btx”).import@ib()
3 =arg1=A2.pos@b(arg1),arg2=A2.pos@b(arg2)
4 =file(“Orders.ctx”).open().cursor@m(Quantity, ShipVia; ShipVia==arg1 || ShipVia==arg2)
5 =A4.groups(ShipVia;sum(Quantity):Quantity)
6 =A5.run(ShipVia=A2(ShipVia))

A3 按取值序列的顺序,计算参数值对应的小整数
A6 把结果集中的 ShipVia 转回对应的字符串值


SQL

SELECT sum(Orders.Quantity) AS Quantity,ShipVia
FROM Orders
WHERE ShipVia in ('Federal Shipping','Speedy Express')
GROUP BY ShipVia

SPL

A
1 >arg=[“Federal Shipping”,“Speedy Express”]
2 =file(“ShipVia.btx”).import@ib()
3 =A2.(arg.contain@b(~))
4 =file(“Orders.ctx”).open().cursor@m(Quantity, ShipVia;A3(ShipVia))
5 =A4.groups(ShipVia;sum(Quantity):Quantity)
6 =A5.run(ShipVia=A2(ShipVia))

A3 过滤参数是集合。按取值序列的顺序,计算对应的 boolean 序列,表示当前成员是否在参数集合中
A4 过滤时用序号从 A3 中取值,以判断当前值在参数集合中
A6 把结果集中的 ShipVia 转回对应的字符串值

以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾