SPARQL选择计数器

时间:2016-10-07 08:31:40

标签: max sparql counter

我是sparql的新手,试图在不创建新表的情况下,只使用子查询来确定选择另一个查询的计数器最大值的最佳方法。我正在处理一个相对较小的数据集,因此计算时间不是问题。

SELECT ?p1 ?c1  (MAX(?cnt1) AS ?maxc)
WHERE{
{
SELECT ?p1 ?c1 (COUNT(?s1) AS ?cnt1)
WHERE {
    ?s1 ?p1 ?o1;
          a ?c1.
     }Group by ?p1 ?c1
#ORDER BY ?p1 DESC(?cnt1)
}

}GROUP BY ?p1

所以我希望得到一个?p1的每一个值,其中max?cnt1是合适的?c1

我非常确定这是做到这一点的方法,但由于某种原因,它会导致我的端点崩溃。内部查询工作正常,何时分组?p1和 ?c1它只生成一行,最大值为空。

谢谢, 欧米

1 个答案:

答案 0 :(得分:1)

除非您按两者进行分组,否则您的查询将崩溃?p1和?c1。 分组时,SELECT中出现的所有变量必须出现在GROUP或聚合函数中(MAX,COUNT等)。

以下查询将为您提供计数器的最大值,但没有相应的?p1?c1。要拥有这些,您可能需要另一个带有FILTER的子查询...

SELECT (MAX(?cnt1) AS ?maxc)
WHERE{
{
SELECT ?p1 ?c1 (COUNT(?s1) AS ?cnt1)
WHERE {
    ?s1 ?p1 ?o1;
          a ?c1.
     }Group by ?p1 ?c1
}
}