有没有办法找到每个班级的平均,最小和最大实例数?我发现了这个:
SELECT (count(?instance) as ?no)
WHERE {
?instance a ?class .
}
group by ?class
order by desc(?no)
答案 0 :(得分:1)
你快到了。
您当前的查询返回每个类的实例数,例如
+-------+
| no |
+-------+
| 33054 |
| 64239 |
| 28675 |
+-------+
现在,您想要的是计算此中间结果的聚合。 幸运的是,SPARQL 1.1允许子查询,即我们可以直接在另一个查询中重用查询结果,并简单地使用相应的聚合函数:
SELECT (AVG(?no) AS ?avg)
(MIN(?no) AS ?min)
(MAX(?no) AS ?max)
WHERE {
SELECT (COUNT(?instance) AS ?no)
WHERE { ?instance rdf:type ?class }
GROUP BY ?class
}
输出:
+-----------------------+-------+-------+
| avg | min | max |
+-----------------------+-------+-------+
| 41989.333333333333333 | 28675 | 64239 |
+-----------------------+-------+-------+
注意,我删除了ORDER BY
,因为它不会在此处为最终结果做出贡献。此外,您可以看到,由于我们正在计算唯一现有列上的聚合,因此不需要GROUP BY
。