質問
次のクエリがあります:
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または" *が表示されるより" "
誰かが私にそれを正しくする方法を教えてもらえますか?
解決
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 はそうです。
他のヒント
GROUP BYでCOUNT()、MIN()、MAX()、SUM()、AVG()を使用すると、トリプルのグループの集計値を生成できます。これらのパターンは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/
を参照してください。所属していません StackOverflow