SPARQL BIND(COUNT(...)AS ...)不起作用

时间:2016-08-07 20:55:23

标签: sparql blazegraph

我试图为变量分配一个计数,以便以后在查询中使用(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。这可能是一个错误吗?

1 个答案:

答案 0 :(得分:2)

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

select (count(*) as ?numResults) {
    ?subject ?predicate ?object
}

如果您只是尝试计算匹配数量,那么您可以使用计数而不使用(这会给您一个隐含的,组):

{{1}}