kdb/q 计算表中的列对实例并返回所有具有特定条件的

问题描述 投票:0回答:1

我有一个销售记录表,如下所示:

姓名 项目 行动 价格
苹果 购买 5.00
苹果 出售 6.00
面包 出售 9.00
鲍勃 苹果 购买 5.00
鲍勃 购买 1.00
鲍勃 购买 1.00
鲍勃 出售 2.00
sample_data: ([] Name: `Ann`Ann`Ann`Bob`Bob`Bob`Bob; Item: `Apple`Apple`Bread`Apple`Salt`Salt`Salt; Action: `Buy`Sell`Sell`Buy`Buy`Buy`Sell; Price: 5.00 6.00 9.00 5.00 1.00 1.00 2.00)

我的最终结果是获得至少被购买和出售过一次的名称和物品的组合。

我的思考过程是创建一个如下所示的表,该表收集每个名称-项目对的购买和销售数量:

姓名 项目 购买
苹果 1 1
面包 0 1
鲍勃 苹果 1 0
鲍勃 2 1

然后,仅提取那些具有 >=1 购买和销售的名称-项目对:

姓名 项目
苹果
鲍勃
kdb
1个回答
0
投票

fby 可能是最简单的方法:

q)select distinct Name,Item from sample_data where({all`Buy`Sell in x};Action)fby([]Name;Item)
Name Item
----------
Ann  Apple
Bob  Salt
© www.soinside.com 2019 - 2024. All rights reserved.