次のクエリがあります。
_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."
_を受け取るよりも、誰かが教えてくれますか?
JavaとJenaのARQを使用している場合は、 ARQの集計用拡張機能 を使用できます。クエリは次のようになります。
SELECT ?tag (count(distinct ?tag) as ?count)
WHERE {
?r ns9:taggedWithTag ?tagresource.
?tagresource ns9:name ?tag
}
LIMIT 5000
2008年の元のSPARQL仕様 には集計が含まれていませんでしたが、 現在のバージョン、2013年の1.1 は含まれています。
COUNT()、MIN()、MAX()、SUM()、AVG()をGROUP BYとともに使用すると、トリプルのグループの集計値を生成できます。これらのパターンはSPARQL 1.1に固有のものである可能性があることに注意してください。
たとえば、これは各?categoryの?valueを合計できます。
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
これらの例は、Bob DuCharme(2011)、「Learning SPARQL」の資料に触発されています。米国カリフォルニア州セバストポルのO’Reilly Media。 http://www.learningsparql.com/ を参照してください
GROUP BYを使用する際の「Bad aggregate」エラーを回避するには: