我正在尝试在以下xml文档中找到拥有最多员工(及其员工数量)的部门:
<organization>
<departements>
<dept id="d1">
<name>accounting</name>
</dept>
<dept id="d2">
<name>marketing</name>
</dept>
<dept id="d3">
<name>production</name>
</dept>
</departements>
<employees>
<emp id="e1">
<name>...</name>
<activities>
<activity ref="d1"/>
</activities>
</emp>
<emp id="e2">
<name>...</name>
<activities>
<activity ref="d2"/>
<activity ref="d3"/>
</activities>
</emp>
<emp id="e3">
<name>...</name>
<activities>
<activity ref="d3"/>
</activities>
</emp>
<emp id="e4">
<name>...</name>
<activities>
<activity ref="d2"/>
</activities>
</emp>
</employees>
</organization>
以下是我的尝试:
(for $dept in doc('emp_dept.xml') //dept
let $nbr := count(doc('emp_dept.xml')//activity[@ref = $dept/@id])
order by $nbr descending
return $dept ) [1]
以上查询返回以下输出:
<dept id="d2">
<name>marketing</name>
</dept>
我想得到以下输出:
<dept id="d2">
<name>marketing</name>
<employees>2</employees>
</dept>
<dept id="d3">
<name>production</name>
<employees>2</employees>
</dept>
答案 0 :(得分:1)
您可以创建您想要输出的dept
元素,确定最多的员工数量,然后输出与最大数量匹配的元素。
我确信有一种更有效的方法,但这是我首先想到的。
let $doc := doc('emp_dept.xml')
let $newDept := for $dept in $doc//dept
return
<dept>{$dept/@*,$dept/*,
<employees>{count($doc//emp[activities/activity/@ref=$dept/@id])}</employees>
}</dept>
let $maxEmployees := max($newDept/employees)
return
$newDept[employees=$maxEmployees]