2009-08-03 53 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/