KDB查询中sum函数正常运行但底层等价运算符+/报错是什么原因?
报错原因拆解
- 首先存在显性笔误:你给出的第二条查询语句中,引用的表名为
j,但此前仅定义了表t,如果当前运行环境不存在名为j的表,这是触发报错的直接原因之一。 - 即便修正表名为
t,直接写select +/age from t依然会报错,核心是q语言select子句的语法解析规则限制:
sum是q原生定义的一元聚合函数,完全符合select子句对聚合操作的语法要求,因此可以直接接列名正常执行。+/是由中缀运算符+搭配over副词/组合构造的等价求和函数,q的select解析器不支持直接在select子句中使用「运算符+副词」的组合作为聚合函数,因此直接调用会触发语法报错。
等价的正确写法
如果要使用+/实现和sum相同的列求和效果,两种写法可以规避语法限制:
- 用括号包裹组合函数:
q)select (+/) age from t age --- 35
- 先将组合函数赋值给变量再调用:
q)sumFunc:+/; select sumFunc age from t age --- 35
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

