2012-11-15 2 views
3

메일 보관 데이터가 포함 된 트리플 저장소가 있습니다. 따라서 (ex:hasSent)을 보내고 (ex:hasReceived) 개의 이메일 (ex:Email)을받은 많은 사람 (foaf:Person)이 있다고 가정 해 보겠습니다.SPARQL의 여러 집계

예 : 물론 ex:hasReceived에 대한

SELECT ?person ?email 
WHERE { 
    ?email rdf:type ex:Email. 
    ?person rdf:type foaf:Person; 
      ex:hasSent ?email. 
} 

같은 작품. 이제는 개인이 보내고받은 이메일의 수를 결정하는 통계 및 분석을하고 싶습니다. 하나의 술어 이렇게하면 간단한 집합입니다 :

SELECT ?person (COUNT(?email) AS ?count) 
WHERE { 
    ?email rdf:type ex:Email. 
    ?person rdf:type foaf:Person; 
      ex:hasSent ?email. 
} 
GROUP BY ?person 

그러나, 나뿐만 아니라받은 이메일의 번호가 필요합니다 필요 나는 별도의 쿼리를 실행하지 않고이 작업을 수행하고 싶습니다. 그래서 나는 다음을 시도했다 :

보내지는 이메일과받은 이메일의 숫자가 정확히 같아 보이지 않았다. 내 SPARQL 문은 사람이 보내고받은 모든 메일의 교차 결과를 가져 오기 때문에 이것이라고 가정합니다. 맞습니까?

통계를 개인별로 얻으려면 어떻게해야합니까?

답변

1

COUNT(?email1)?email1이 정의되지 않았으므로 아무 것도 계산하지 않습니다. 또한 언급 한대로 부분 교차 제품이 있습니다. DISTINCT이 도움이 될 것입니다.

(COUNT(DISTINCT ?sent_email) AS ?sent_emails)

+0

당신은 맞다는'? email1' 언 바운드했다보십시오. 나는 SO에 대한 질의를 닦았지만 완전히는하지 못했습니다. – cyroxx

관련 문제