如何在kdb/q中按Primary分组取Count最大值的单条记录?
解决kdb/q按分组取Count最大值记录的问题
你写的Count xdesc by Primary from tb触发语法错误,是因为不符合kdb/q的查询语法结构——by分组子句需要结合select语句使用,不能直接这样拼接。下面提供几种可行的实现方式:
方法1:使用fby(分组内函数)筛选(推荐)
这是最简洁直观的方式,直接筛选出每组中Count等于该组最大值的记录:
select from tb where Count = max[Count] fby Primary
如果同一分组内有多个Count同为最大值的记录,上面的语句会返回所有符合的记录。如果需要每组只保留一条(比如第一条),可以调整为:
select first Name, first Count by Primary from tb where Count = max[Count] fby Primary
方法2:分组后排序取首/尾记录
先对全表按Primary分组,每组内按Count降序排列,再取每组的第一条记录(降序后第一条就是最大值):
select first each flip xdesc[`Count] by Primary from tb
或者用last配合升序排序(升序后最后一条是最大值),效果一致:
select last each flip asc[`Count] by Primary from tb
验证结果
针对你定义的表:
tb: ([] Primary:`1a`1a`1a`1a`2e`2e`2e`2e; Name:`AXA`FLO`FLO`AXA`AXA`ROT`ROT`ROT; Count: 11 1 60 14 1 1 6 4)
执行上述方法后会得到预期结果:
Primary Name Count ------------------ `1a FLO 60 `2e ROT 6
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

