You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KDB中如何统计多列不同元素数量并合并结果表?

KDB统计指定列去重元素数的合并问题

你遇到的格式问题,本质是因为f each lst返回的是三个单键字典的列表,而非多个单列表格。KDB里单独显示单键字典时会自动渲染成表的样式,但它的本质还是字典;当你用(),/: 处理这个字典列表时,并没有将它们合并为一个表,只是保留了字典列表的结构,所以输出成了多个独立字典的形式。

解决方法

方法1:一次查询生成目标表(推荐,更高效)

不用循环调用函数,直接通过元编程构造多列的去重计数查询,一次得到合并后的表:

lst:`a`b`c
ans:?[`table;();0b;lst!enlist(#:;(?:;)) each lst]

这段代码等价于执行:

select a:count distinct a, b:count distinct b, c:count distinct c from table

方法2:修改函数后合并字典

如果坚持用each调用的方式,修改函数让它直接返回键值对,再合并成字典后转表:

// 修改函数,返回列名到去重计数的映射
f:{[x] x!#{x}table}
// 合并所有键值对为一个字典,再转成表
ans:flip enlist lst!f each lst

为什么原来的方式不行?

你写的f函数返回的是单键字典(显示为表样式),f each lst得到的是(+a!,,983; +b!,,931; +c!,,5)这样的字典列表。(),/: 是对每个字典执行(),`操作,也就是将空列表和字典连接,结果还是原字典,最终得到的还是字典列表,自然无法合并为单表。

内容的提问来源于stack exchange,提问作者Ciaran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:02:42