[英]xQuery on returning maximum element
我对xQuery比较陌生。 我一直在努力为此寻求可行的解决方案。 基本上我有以下xml:
<skills>
<skill name="XQuery" level="2"/>,
<skill name="R" level="1"/>,
<skill name="Python" level="4"/>,
<skill name="Python" level="5"/>,
<skill name="Java" level="2"/>,
<skill name="C" level="2"/>,
<skill name="C" level="5"/>
</skills>
我的预期结果是:
<skill name="XQuery" level="2"/>,
<skill name="Python" level="5"/>,
<skill name="R" level="1"/>,
<skill name="Java" level="2"/>,
<skill name="C" level="5"/>
对于具有相同名称的所有元素,我想返回最大值。
这是一种方法:
let $xml :=
<skills>
<skill name="XQuery" level="2"/>,
<skill name="R" level="1"/>,
<skill name="Python" level="4"/>,
<skill name="Python" level="5"/>,
<skill name="Java" level="2"/>,
<skill name="C" level="2"/>,
<skill name="C" level="5"/>
</skills>
for $distinct-name in distinct-values($xml/skill/@name)
let $skills := $xml/skill[@name = $distinct-name]
let $max := max($skills/@level)
return $skills[@level = $max][1]
这是另一个解决方案(使用XQuery 3.1):
let $xml :=
<skills>
<skill name="XQuery" level="2"/>,
<skill name="R" level="1"/>,
<skill name="Python" level="4"/>,
<skill name="Python" level="5"/>,
<skill name="Java" level="2"/>,
<skill name="C" level="2"/>,
<skill name="C" level="5"/>
</skills>
for $skills in $xml/skill
group by $name := $skills/@name
return sort($skills, function($skill) { number($skill/@level) })[last()]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.