2016-10-07 13 views
1

私はsparqlが新しく、新しいテーブルを作成することなく別のクエリのカウンタの最大値を選択し、サブクエリのみを使用する最良の方法は何ですか?私は計算時間が問題ではないので、比較的小さなデータセットで作業しています。SPARQLがカウンタのMAX値を選択する

SELECT ?p1 ?c1 (MAX(?cnt1) AS ?maxc) 
WHERE{ 
{ 
SELECT ?p1 ?c1 (COUNT(?s1) AS ?cnt1) 
WHERE { 
    ?s1 ?p1 ?o1; 
      a ?c1. 
    }Group by ?p1 ?c1 
#ORDER BY ?p1 DESC(?cnt1) 
} 

}GROUP BY ?p1 

ので、私はすべての値の行を取得するために期待している?最大とP1?適し?C1をCNT1

私はそれを行うための方法であるかなり確信しているが、いくつかのために私のエンドポイントがクラッシュする原因になります。内側のクエリは正常に動作し、?p1と ?c1の両方でグループ化すると、1行しか生成されず、最大値は空です。

おかげで、 オムリ

+1

「クラッシュ」とはどのようなトリプルストアを使用していますか? – AKSW

+1

AKSWと同様に、より詳細な情報が必要です。基本的に「なぜこのクエリ/コードは機能しないのですか」という質問があるときはいつでも問題を再現するために関連情報を提供する必要があります。データセット、期待される結果、使用しているデータベースなど。[mcve]を作成してください。 –

答えて

1

あなたは?p1と?c1の両方によってグループ化されていない限り、あなたのクエリがクラッシュします。 グループ化する場合、SELECTに現れるすべての変数は、GROUPまたは集合関数(MAX、COUNTなど)に表示される必要があります。

次のクエリは、カウンタの最大値を示しますが、対応する?p1?c1はありません。それらを持つには、FILTERを含む別のサブクエリが必要になるでしょう...

SELECT (MAX(?cnt1) AS ?maxc) 
WHERE{ 
{ 
SELECT ?p1 ?c1 (COUNT(?s1) AS ?cnt1) 
WHERE { 
    ?s1 ?p1 ?o1; 
      a ?c1. 
    }Group by ?p1 ?c1 
} 
} 
関連する問題