2015-11-01 76 views
0

的平均值我有下面的XML輸入XQuery的屬性

<foo> 
<bar a=1 b=25/> 
<bar a=2 b=30/> 
<bar a=1 b=35/> 
<bar a=2 b=40/> 
<foo> 

,我需要得到以下結果

<foo> 
<bar a=1>average of b = 30</bar> 
<bar a=2>average of b = 35</bar> 
<foo> 

我也很難做的一個獨特的價值。

我已經

<foo> 
{for $e in doc(XXX.xml)/foo/bar 
    return 
     <bar a="distinct-values(data($e/@a))"> 
     {for $c in distinct-values(data($e/@a)) 
      return avg(data($e/@b))} 
     </bar>} 
</foo> 

我缺少什麼?

+0

你解決了問題嗎? – Karthick

+0

非常感謝你 –

回答

0

我希望這是你在找什麼。

let $doc := <foo> 
       <bar a="1" b="25"/> 
       <bar a="2" b="30"/> 
       <bar a="1" b="35"/> 
       <bar a="2" b="40"/> 
      </foo> 

let $result := <foo> 
       {for $a in fn:distinct-values($doc//bar/@a) 
        for $b in avg($doc//bar[@a=$a]/@b) 
        return 
         <bar a="{$a}"> 
         averge of b = {$b} 
         </bar> 
       } 
       </foo> 
return $result 

適當的循環會做。

1

如果您的XQuery處理器支持的XQuery 3.0,你可以使用結構組,而這正是設計用於這種用途的情況下,在我看來,更漂亮閱讀:

<foo>{ 
    for $el in doc(XXX.xml)/foo/bar 
    let $a := $el/@a 
    group by $a 
    return 
     <bar a="{$a}">average of b = {avg($el/@b)} 
     </bar> 
} 
</foo> 

這組,每組bar元素除以a屬性並計算(並輸出)b屬性的平均值。