2009-08-03 96 views
27

我有以下查询:SPARQL查询和重复计数

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),但比我得到th e错误消息"Variable or "*" expected."有人可以告诉我,如何使它正确吗?

+0

核心SPARQL没有像COUNT这样的聚合。您正在使用哪个SPARQL扩展? – laalto 2009-08-03 17:29:43

+0

我认为,我正在使用核心:( – cupakob 2009-08-03 18:06:20

回答

25

对GROUP BY使用COUNT(),MIN(),MAX(),SUM(),AVG()可以为三元组生成汇总值。请注意,这些模式可能特定于SPARQL 1.1。

例如,这一个可以总结为每个类别的α值?,

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

这一个可以计算为谓词2 P的使用次数,

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

这些实施例受Bob DuCharme(2011)“学习SPARQL”的材料启发。 O'Reilly Media,美国加利福尼亚州塞巴斯托波尔;请参阅http://www.learningsparql.com/