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

函数式形式下SUM为何未忽略NULL值?

KDB+函数式Select逐行求和处理NULL问题

问题根源

  1. sum遇NULL返回NULL:KDB+里sum函数默认碰到NULL就直接返回NULL,不会自动把NULL当0算,和你理解的文档描述有出入。
  2. sum/是全局求和:sum/是归约操作,会把所有行的指定列数据全加起来,自然得到的是全局总和,不是逐行计算的结果。

解决办法

要实现逐行对多列求和且把NULL视为0,可以用下面两种方式修改函数式select的参数:

方法1:先把NULL替换成0,再逐行求和

用0^把列里的NULL换成0,再配合sum each逐行处理列列表:

a: (enlist col)!enlist(sum each; 0^(enlist,`dealsA`dealsB`dealsC))
  • 0^会将每列中的NULL替换为0,避免求和时出现NULL结果
  • sum each针对每行的三列值执行求和,实现逐行计算

方法2:用sum skip忽略NULL(效果等价于视NULL为0)

sum skip会自动跳过NULL值求和,和把NULL当0算的效果一样,再加上each逐行执行:

a: (enlist col)!enlist(sum skip each; enlist,`dealsA`dealsB`dealsC)

验证示例

假设测试表如下:

t: ([] dealsA: 1 2 NULL; dealsB: NULL 3 4; dealsC: 5 NULL 6)

用方法1的函数式查询:

select a: sum each 0^(dealsA,dealsB,dealsC) from t

返回结果:

a
---
6
5
10

完全符合逐行求和且NULL视为0的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:22:06