2011-12-22 3 views
2

나는 다음과 같은 요소가 포함 된 XML 파일이와 속성 :XQuery에서 고유 값의 각 인스턴스를 계산하는 방법은 무엇입니까?

<element> 
<unit id="1" color="blue"/> 
<unit id="2" color="blue"/> 
<unit id="3" color="red"/> 
</element> 

가 어떻게 하나의 수를 얻을 수 있습니까) 각 속성 색상의 별개의 발생, 2) 각각 별개의 발생을 계산? 나는 '하지만

지금까지, 나는, 서로 다른 속성의 수 또는 이들의 수 중 하나 끝나는, 행운과 함께, 모두 별개의-값()수()과 조합을 시도했습니다 모두를 얻고 싶습니다.

I는 다음과 같이 것 좀하고 싶습니다 결과 목록 :

Blue 2 
Red 1 
+0

[DISTINCT, SUM, 주어진 XML의 DataTable 계산] (http://izlooite.blogspot.com/2010/10/how-to-distinct-sum-count-datatable-for.html) –

답변

7

이 쿼리 당신이 원하는 것을 수행해야합니다

let $input := 
    <element> 
    <unit id="1" color="blue"/> 
    <unit id="2" color="blue"/> 
    <unit id="3" color="red"/> 
    </element> 

return 
    for $value in distinct-values($input/unit/@color) 
    let $count := count($input/unit[@color eq $value]) 
    order by $count descending 
    return concat($value," ",$count) 

이 나를 위해 다음과 같은 출력을 생성 MarkLogic :

blue 2 
red 1 

업데이트 : 카운트 값에 따라 결과를 정렬하도록 쿼리를 수정했습니다.

+0

Works 나를 위해, 많은 감사합니다! – ritzdiamond

+0

한 번 더 질문합니다. 인스턴스 수에 따라 결과를 구성하는 방법은 무엇입니까? – ritzdiamond

+0

"order by"절을 사용합니다. 지금 업데이트 된 예제를 참조하십시오. –

3

이 짧은 것처럼 보인다는 XPath 2.0 표현이 XPath 표현식이 제공된 XML 문서에 대해 평가

for $v in distinct-values(/*/*/@color) 
return 
    ($v, count(index-of(/*/*/@color, $v)), '&#xA;') 

가 :

<element> 
    <unit id="1" color="blue"/> 
    <unit id="2" color="blue"/> 
    <unit id="3" color="red"/> 
</element> 

원하는 , 올바른 결과가 생성됩니다. :

blue 2 
red 1 
관련 문제