通过查询合并 KDB (Q) 组中的选定组键
Merge selected group keys in KDB (Q) group by query
我有一个基本上按 KDB 中的组键进行计数的查询,出于此查询的目的,我想将其中的一些组视为一个组。我想做的事情的简单描述是计算一个月内客户的订单,我在数据库中有几个客户实际上是另一个客户的子公司,我想合并子公司的数量与他们的上级组织。实际情况比这复杂得多并且没有涉及不必要的细节,我只想说我不能按客户分组并在执行查询后操作结果以合并计数 - 我需要 "by" 子句我的查询直接进行合并。
在SQL,我会做这样的事情:
select customer_id, count(*) as order_count
from orders
order by select case when customer_id = 1 then 2 when customer_id = 3 then 4 else customer_id end
在上面的例子中,客户 1 是客户 2 的子公司,客户 3 是客户 4 的子公司,其他所有客户都被正常对待
假设 Q 中的等效代码(没有组键操作)是:
select order_count:count i by customer_id from orders
我如何输入等效的 select case
语句来操作组密钥?我试过了,但出现 rank
错误:
select order_count:count i by $[customer_id=1;2;customer_id=3;4;customer_id] from orders
我的 Q 很糟糕,所以我可能犯了一个非常简单的错误。非常感谢任何建议。
一种方法可能是拥有子公司字典并在您的 by 子句中使用 lookup/re-map:
q)dict:1 3!2 4
q)show t:([] order:1+til 10;customer:1+10?6)
order customer
--------------
1 1
2 1
3 6
4 2
5 3
6 4
7 5
8 5
9 3
10 5
q)select order_count:count i by customer^dict[customer] from t
customer| order_count
--------| -----------
2 | 3
4 | 3
5 | 3
6 | 1
虽然您会丢失一些关于谁实际拥有订单的信息,但您只能在父级别知道
我有一个基本上按 KDB 中的组键进行计数的查询,出于此查询的目的,我想将其中的一些组视为一个组。我想做的事情的简单描述是计算一个月内客户的订单,我在数据库中有几个客户实际上是另一个客户的子公司,我想合并子公司的数量与他们的上级组织。实际情况比这复杂得多并且没有涉及不必要的细节,我只想说我不能按客户分组并在执行查询后操作结果以合并计数 - 我需要 "by" 子句我的查询直接进行合并。
在SQL,我会做这样的事情:
select customer_id, count(*) as order_count
from orders
order by select case when customer_id = 1 then 2 when customer_id = 3 then 4 else customer_id end
在上面的例子中,客户 1 是客户 2 的子公司,客户 3 是客户 4 的子公司,其他所有客户都被正常对待
假设 Q 中的等效代码(没有组键操作)是:
select order_count:count i by customer_id from orders
我如何输入等效的 select case
语句来操作组密钥?我试过了,但出现 rank
错误:
select order_count:count i by $[customer_id=1;2;customer_id=3;4;customer_id] from orders
我的 Q 很糟糕,所以我可能犯了一个非常简单的错误。非常感谢任何建议。
一种方法可能是拥有子公司字典并在您的 by 子句中使用 lookup/re-map:
q)dict:1 3!2 4
q)show t:([] order:1+til 10;customer:1+10?6)
order customer
--------------
1 1
2 1
3 6
4 2
5 3
6 4
7 5
8 5
9 3
10 5
q)select order_count:count i by customer^dict[customer] from t
customer| order_count
--------| -----------
2 | 3
4 | 3
5 | 3
6 | 1
虽然您会丢失一些关于谁实际拥有订单的信息,但您只能在父级别知道