gpt4 book ai didi

kdb - 在 q kdb 的特定条件下使用 group by 优化查询

转载 作者:行者123 更新时间:2023-12-04 21:49:51 25 4
gpt4 key购买 nike

我们有如下表t

q)t:([] sym:10?`GOOG`AMZN`IBM; px:10?100.; size:10?1000; mkt:10?`ab`cd`ef)

如果“mkt”列的值为“ef”,我们的要求是按“sym”列对表“t”进行“分组”,对于其余市场(“ab`cd”),我们需要所有值(不分组)。对于这个用例,我在下面编写了按预期工作的查询,

q)(select px, size, sym, mkt from select by sym from t where mkt=`ef), select px, size, sym, mkt from t where mkt in `ab`cd

请帮助我以某种方式优化上述查询

sudo code - 
if mkt=`ef:
then use group by on table
else if mkt in `ab`cd
don't use group by on table

最佳答案

我发现了两种不同的查询方式,它们与您提供的方式不同。

您可以使用以下查询在一个选择语句中完成您想要的:

select from t where (mkt<>`ef)|(mkt=`ef)&i=(last;i)fby ([]sym;mkt)

但是如果你比较一下它的速度:

q)\t:1000 select from t where (mkt<>`ef)|(mkt=`ef)&i=(last;i)fby ([]sym;mkt)
68

您的原始查询:

q)\t:1000 (select px, size, sym, mkt from select by sym from t where mkt=`ef), select px, size, sym, mkt from t where mkt in `ab`cd
40

您可以看到您的查询速度更快。

另外你可以尝试这个不需要明确说明你不希望按 sym 分组的 t 中的每个 mkt

(0!select by sym from t where mkt=`ef),select from t where mkt<>`ef

但这最终还是与您的原始解决方案的速度大致相同:

q)\t:1000 (0!select by sym from t where mkt=`ef),select from t where mkt<>`ef
42

因此,就优化而言,您的查询似乎可以很好地满足您的要求。

关于kdb - 在 q kdb 的特定条件下使用 group by 优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58852858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com