找到Xquery中员工最多的部门

时间:2016-12-28 19:43:55

标签: xquery

我正在尝试在以下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>

1 个答案:

答案 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]