2016-10-07 2 views
1

저는 sparql을 처음 사용하고 새 테이블을 만들지 않고 하위 쿼리 만 사용하여 다른 쿼리의 카운터의 최대 값을 선택하는 가장 좋은 방법을 취하고 있습니다. 계산 시간이 문제가되지 않도록 비교적 작은 데이터 세트로 작업하고 있습니다. SPARQL 카운터의 최대 값 선택

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)의 모든 값에 대한 행을 얻을 것으로 기대하고있어? CNT1 적합한? C1

내가 그 일부에 대한 그 작업을 수행하는 방법하지만 꽤 확신 내 엔드 포인트가 손상되는 이유. 내부 쿼리가 제대로 작동하고? p1 및 ? c1로 그룹화 할 때 한 줄만 생성되고 최대 값은 비어 있습니다.

감사합니다, 당신은 둘 다? (P1)와? (C1)에 의해 그룹화하지 않는 오므리

+1

"크래시"를 의미하는 트리플 스토어는 무엇을 사용합니까? – AKSW

+1

마찬가지로 AKSW도 표시했습니다. 자세한 내용이 필요합니다. 기본적으로 "이 쿼리/코드가 작동하지 않는 이유는 무엇입니까?"라는 질문이있을 때마다 문제를 재현하기 위해 관련 정보를 제공해야합니다. 데이터 세트, 예상 결과, 사용중인 데이터베이스 등. [mcve]를 만들어보십시오. –

답변

1

조회에 충돌합니다. 그룹화 할 때 SELECT에 나타나는 모든 변수는 GROUP 또는 집계 함수 (MAX, COUNT 등)에 나타나야합니다.

다음 쿼리는 카운터의 최대 값을 알려주지 만 해당? p1? c1은 제공하지 않습니다. 필터가있는 하위 쿼리가 필요할 수도 있습니다.

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