質問

次のクエリがあります:

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/

を参照してください。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top