kdb如何在select中使用条件和

kdb如何在select中使用条件和,kdb,Kdb,如何在kdb中获得条件和,类似于下面的sql查询 Select sum(qty > 0, qty, 0) as buy, sum(qty < 0, qty, 0) as sell from trades 选择sum(数量>0,数量,0)作为买入,sum(数量

如何在kdb中获得条件和,类似于下面的sql查询

Select sum(qty > 0, qty, 0) as buy, sum(qty < 0, qty, 0) as sell from trades
选择sum(数量>0,数量,0)作为买入,sum(数量<0,数量,0)作为卖出交易

我正在寻找一种不使用where子句的方法。

您可以在select语句中使用内嵌的lambda函数来实现这一点:

q)trades:([]sym:`a`b`c`d`e`f`g;qty:-34 -27 -11 50 19 -30 1)
q)select buy:sum {x where 0<x}[qty], sell:sum {x where 0>x}[qty] from trades
buy sell
--------
70  -102

我将遵循@davidcrossey提出的第一种方法,但会稍微简化代码并删除匿名函数:

select buy: sum qty where qty > 0, sell: sum qty where qty < 0 from trades
在本例中,
充当向量条件运算符,因此传递整列是有效的但是,在某些情况下,函数需要输入作为原子,在这种情况下,
每个
都可以使用

q)trades:([]sym:`a`b`c`d`e`f`g;qty:-34 -27 -11 50 19 -30 1)
q)select buy:sum qty where {0<x}each qty, sell:sum qty where {0>x} each qty from trades
buy sell
--------
70  -102
交易:([]符号:`a`b`c`d`e`f`g;数量:-34-27-115019-301) q) 选择购买:合计数量,其中{0x}来自交易的每个数量 买卖 -------- 70 -102
您现在可以替换
{0是否可以共享预期的输出-不确定sql应该做什么。。。
select buy: sum qty where qty > 0, sell: sum qty where qty < 0 from trades
trades: enlist[`qty]!enlist -50 + 1000000?100;
\ts select buy: sum qty where qty > 0, sell: sum qty where qty < 0 from trades
// returns 43 8389424
\ts select buy:sum ?[qty>0;qty;0], sell:sum ?[qty<0;qty;0] from     trades
// returns 68 17826560
\ts select buy:sum qty|0f,sell:sum qty&0f from trades
// returns 39 16777856
q)trades:([]sym:`a`b`c`d`e`f`g;qty:-34 -27 -11 50 19 -30 1)
q)select buy:sum qty where {0<x}each qty, sell:sum qty where {0>x} each qty from trades
buy sell
--------
70  -102