ArangoDB:为集合属性添加SUM函数时Collect语法报错
AQL聚合查询错误修正方案
你的代码存在几个语法和逻辑问题,直接导致COLLECT语句报错,具体问题和修正后的代码如下:
问题点说明
- 重复使用
aggregate关键字:AQL中COLLECT的聚合逻辑只需声明一次规则,不需要每个聚合项前都加aggregate。 date_trunc参数缺失:该函数必须指定截断单位(比如按天截断就传"day"),正确语法是DATE_TRUNC(unit, date_value)。- 未定义的
length变量:return里的"Incoming Accounts":length没有对应数据源,推测你想统计关联的转出账户数量,需要用COUNT(DISTINCT d._from)实现。 - 冗余的
distinct:COLLECT聚合后只会返回一条汇总结果,return时加distinct完全没必要。
修正后的代码
FOR d IN Transaction FILTER d._to == "Account/123" COLLECT transactionCount = COUNT(d._id), totalAmount = SUM(d.Amount), activeDays = COUNT(DISTINCT DATE_TRUNC("day", d.Time)), incomingAccountCount = COUNT(DISTINCT d._from) RETURN { "Incoming Accounts": incomingAccountCount, "Days Active": activeDays, "Total Amount": totalAmount, "Transaction Count": transactionCount }
关键修改解释
- 删掉了COLLECT语句里重复的
aggregate,直接按顺序写聚合表达式。 - 给
date_trunc补充了"day"参数,确保把Time字段截断到日期维度去重统计。 - 用
COUNT(DISTINCT d._from)统计不同的转入账户,替换原来未定义的length。 - 移除return里的
distinct,同时保留了总金额、交易数等实用聚合结果,方便你查看完整统计数据。
内容的提问来源于stack exchange,提问作者Chaitanya Srinevas
相关产品推荐
相关产品推荐

