0

我正在尝试将计数分配给一个变量以供以后在查询(SPARQL)中使用。

我什至无法使以下工作:

SELECT ?resultsCount
WHERE{
    ?subject ?predicate ?object.
    BIND(COUNT(?object) AS ?resultsCount)
}

这里我的语法或语义有问题,因为我只是得到一个重复多次的空结果?resultsCount,而不是简单的例如 86(结果数)。

但是,当我执行以下操作时,我会得到结果数(例如 86):

SELECT (COUNT(?object) AS ?resultsCount)
WHERE{
    ?subject ?predicate ?object
}

有什么办法可以像第一个例子中那样BIND工作吗?COUNT如果没有,是否有不同的正确方法来获得相同的功能?

我正在使用 Blazegraph 2.1.2。这可能是一个错误吗?

4

1 回答 1

2

count是一个聚合函数。要使用count,您需要在查询中使用group by ,并在投影中 使用count 。Count将计算每个组内的结果数。您还可以将distinctcount一起使用,因此您可以执行以下操作来获取每个主题的不同对象的数量:

select ?subject (count(?object) as ?numObjects) {
    ?subject ?predicate ?object
}
group by ?subject

如果你只是想计算匹配的数量,那么你可以使用不带group by 的count(这给你一个单一的、隐式的、组):

select (count(*) as ?numResults) {
    ?subject ?predicate ?object
}
于 2016-08-08T00:36:40.727 回答