ArangoDB AQL聚合函数语法

2lpgd968  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(265)

像sum()这样的聚合函数的语法到底是什么?
例如,以下列结构为例:

let json = {
    "ages": {
    "age": [
    "20",
    "30",
    "40"
    ]
    }
}

for age in json.ages.age return age

返回

["20", "30", "40"]

在Arango 2.0.4中,以下所有代码段都返回“[1542]调用函数'SUM()'时使用的参数类型无效”:

// LR
let ages = (for age in json.ages.age return age)
return sum(ages)

// LR
let ages = (
    for age in json.ages.age  
    return age
)
return sum((for age in json.ages.age return age))

// R
return sum((for age in json.ages.age return age))

正确的语法是什么?
语法页面(http://www.arangodb.org/manuals/current/Aql.html#AqlFunctionsList)似乎没有任何相关范例。
我能找到的最接近语法示例的是:https://www.arangodb.org/foxx

controller.get("/revenue/:year", function (req, res) {
  var query = "RETURN SUM((FOR bill IN billcollection FILTER bill.year == @year     RETURN     bill.amount))"; 
  var stmt = db._createStatement({ "query": query});
  stmt.bind("year",parseInt(req.params("year"),10));
  var c = stmt.execute();
  res.json(c);
});

但是上面的语法似乎对我来说是失败的。
是否有更详细的语法参考?

inb24sb2

inb24sb21#

你的方法是正确的,但你在文件中漏掉了一个小地方。)
在SUM()的文档中,它说:
SUM(list):返回list中值的总和。这要求list中的元素为数字。空值将被忽略。
(Docs请参阅:)
请注意**“这要求列表中的元素为数字”**
因此,JSON示例的列表中应该包含数字,而不是字符串。

let json = {
    "ages": {
    "age": [
        20,
        30,
        40
    ]
    }
}

let ages = (for age in json.ages.age return age)
return sum(ages)

将上面的代码片段复制并运行到AQL编辑器中应该会得到所需的结果:

[
  90
]

当然,您也可以保持json不变,并通过相应地更改AQL查询将字符串类型转换为数字:

let json = {
    "ages": {
    "age": [
        "20",
        "30",
        "40"
    ]
    }
}

let ages = (for age in json.ages.age return TO_NUMBER(age))
return sum(ages)

相关问题