我想在我的arangoDB(2.3.1)实例上执行AQL查询,以计算两个平均值之间的差值(average_value)(res可能是另一个子查询结果):
LET last = (FOR r in res
FILTER DATE_MONTH(r.date) == 1 AND DATE_YEAR(r.date) == 2015
COLLECT name = r.name INTO g
RETURN {"name":name,"average_value":AVERAGE(g[*].r[*].value)}
)
LET current = (FOR r in res
FILTER DATE_MONTH(r.date) == 2 AND DATE_YEAR(r.date) == 2015
COLLECT name = r.name INTO g
RETURN {"name":name,"average_value":AVERAGE(g[*].r[*].value)}
)
FOR l IN last
FOR c IN current
FILTER c.name == l.name
RETURN {"name":c.name,"delta":c.average_value-l.average_value}
但即使只有
FOR l IN last
RETURN l
我确实得到了"name",但"average_value"将为null。这是否按设计工作,或者我如何访问子查询中的聚合值?
在没有访问数据的情况下,我认为问题是.r[*].value
造成的。
在定义了r
的两个FOR
循环中,r
是对单个文档的引用。在单个文档上使用展开运算符([*]
)将生成null
,因为[*]
运算符只能用于列表/数组。
相反,您可以使用.r.value
而不是.r[*].value
。然后arangob数据库应该可以执行您想要的操作。