基于公共属性对值进行分组

时间:2014-12-01 00:07:45

标签: xml database xquery

到目前为止,我有一个xquery表达式的输出:

<skill what="C" level="4"/>,
<skill what="C" level="2"/>,
<skill what="C" level="3"/>,
<skill what="Java" level="3"/>,
<skill what="Java" level="3"/>,
<skill what="Java" level="3"/>,
<skill what="SQL" level="2"/>,
<skill what="SQL" level="3"/>,

我想基于&#34;什么&#34;来汇总输出。属性。所以不是上面我想要的东西:

3, 3, 2

对此的任何帮助肯定会受到赞赏。

注意:我使用的是XML 1.0

1 个答案:

答案 0 :(得分:0)

如果目标是产生每种不同技能的发生次数计数:

如果是这种情况并且您可以使用XQuery 3.0,那么您可以使用group by表达式,例如:

xquery version "3.0";

for $skill in /skill
let $what := string($skill/@what)
group by $what
return
    count($skill)

如果您没有XQuery 3.0,但拥有XQuery 1.0,那么您需要首先使用@what确定您希望分组的fn:distinct-values的独特技能。从那里你可以循环遍历独特的技能,然后你可以用谓词过滤,最后确定最低技能水平。例如:

xquery version "1.0";

let $what-skills := distinct-values(/skill/string(@what))
return
    for $what-skill in $what-skills
    let $grouped-skills := /skill[@what eq $what-skill]
    let $count-distinct-skill := count($grouped-skills)
    return
        $count-distinct-skill