SPARQL查询和重复计数(SPARQL query and distinct count)

2019-07-31 08:13发布

我有以下查询:

SELECT ?tag WHERE {
  ?r ns9:taggedWithTag ?tagresource.
  ?tagresource ns9:name ?tag
}
LIMIT 5000

其结果是:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb

我想获得的财产以后这样的:

tag | count
-----------------
abc     7
abd     1
ads     1
anb     1

我有尝试过count(*)count(?tag) ,但比我得到的错误信息"Variable or "*" expected." 谁能告诉我,怎么做是正确的?

Answer 1:

如果您使用的是Java和耶拿的ARQ,您可以使用ARQ的扩展聚集 。 您的查询看起来是这样的:

SELECT ?tag (count(distinct ?tag) as ?count)
WHERE {
    ?r ns9:taggedWithTag ?tagresource.
    ?tagresource ns9:name ?tag
}
LIMIT 5000

在从2008年最初的SPARQL规范不包括集合,但目前的版本,1.1,从2013年开始做。



Answer 2:

使用COUNT(),MIN(),MAX(),SUM(),AVG()的GROUP BY可以产生汇总值三元组。 请注意,这些图案可能是特定于SPARQL 1.1。

例如,这可以为每个求和?值?类别,

SELECT ?category (SUM(?value) as ?valueSum)
WHERE
{
  ?s ?category ?value .
}
GROUP BY ?category

这一个可以依靠谓语使用次数?P,

SELECT ?p (COUNT(?p) as ?pCount)
WHERE
{
  ?s ?p ?o .
}
GROUP BY ?p

这些实施例通过从材料鲍勃迪沙尔姆(2011),“学习SPARQL”的启发。 O'Reilly Media公司,塞瓦斯托波尔,CA,USA; 看到http://www.learningsparql.com/



文章来源: SPARQL query and distinct count
标签: count sparql