首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性的XQuery平均值

属性的XQuery平均值
EN

Stack Overflow用户
提问于 2015-11-02 05:49:32
回答 2查看 235关注 0票数 0

我有以下XML输入

代码语言:javascript
复制
<foo>
<bar a=1 b=25/>
<bar a=2 b=30/>
<bar a=1 b=35/>
<bar a=2 b=40/>
<foo>

我需要得到以下结果

代码语言:javascript
复制
<foo>
<bar a=1>average of b = 30</bar>
<bar a=2>average of b = 35</bar>
<foo>

我很难做一件有价值的事。

我有过

代码语言:javascript
复制
<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>

我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-11-02 18:52:04

如果您的XQuery处理器支持XQuery 3.0,您可以使用group by结构,它正是为这种用例而设计的,在我看来,阅读起来要好得多:

代码语言:javascript
复制
<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>

它根据a属性对每个bar元素进行分组,并计算(并输出) b属性的平均值。

票数 1
EN

Stack Overflow用户

发布于 2015-11-02 17:30:14

我希望这就是你要找的。

代码语言:javascript
复制
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 

适当的for循环就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33467630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档