SPARQL平均实例

时间:2018-01-22 17:48:49

标签: sparql average

有没有办法找到每个班级的平均,最小和最大实例数?我发现了这个:

SELECT (count(?instance) as ?no) 
WHERE {
    ?instance a ?class .
}
group by ?class
order by desc(?no)    

1 个答案:

答案 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