我是 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 的每个值获取一行,最大 ?cnt1 适合 ?c1
我很确定这是这样做的方法,但由于某种原因它会导致我的端点崩溃。内部查询工作正常,并且按 ?p1 和 进行分组时 ?c1 它只生成一行并且最大值为空。
谢谢, 奥姆里
最佳答案
除非您同时按 ?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
}
}
关于max - SPARQL选择计数器的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39912861/