问题描述
编写一个 Q-sql 查询,将 BA.N 的价格乘以 2,GS.N 乘以 3,MSFT.O 乘以 4,并使用向量条件语句调用列 newPrice
tab2:`syms`prices!(`MSFT.O`GS.N`BA.N;45.15 191.10 178.50)
flip tab2
select syms,prices,newPrice:(prices*(4,3,2)) from flip tab2
解决方法
您应该创建乘数图
(`MSFT.O`GS.N`BA.N!2 3 4)
并根据行符号乘以地图中的每个价格:
update newPrice: prices*(`MSFT.O`GS.N`BA.N!2 3 4)syms from flip tab2
,
我不确定使用向量条件是否是解决此问题的最简单方法。例如,您可以使用简单的字典来实现类似的效果。首先定义一个字典,将你的符号映射到它们的乘数,然后在你的选择语句中使用该字典:
tab2: flip `syms`prices!(`MSFT.O`GS.N`BA.N;45.15 191.10 178.50)
d: `MSFT.O`GS.N`BA.N!4 3 2;
select syms,prices,newPrice: prices*d[syms] from tab2
syms prices newPrice
----------------------
MSFT.O 45.15 180.6
GS.N 191.1 573.3
BA.N 178.5 357
向量条件只能返回两个结果之一,这取决于条件是真还是假。要将限制扩展到您想要的内容,您可以将条件嵌套在彼此内部。所以喜欢:
select syms,newPrice: ?[syms=`MSFT.O; prices*4; ?[syms=`GS.N; prices*3; ?[syms=`BA.N;prices*2;prices]]] from tab2
但是这很快变得笨拙并且不能很好地扩展。如果你添加更多的符号,更新字典会很容易,但更新条件会很烦。