[英]XQuery: Returning the highest value after ordering
我还是 XQuery 的新手,但我几乎已经弄清楚了这个查询,但它只需要返回具有最多作者的元素的 proteinID 和 numberOfAuthors,但是它目前返回所有这些而不是只返回元素作者数量最多。
我的查询是
for $i in doc("test.xml")/ProteinDatabase/ProteinEntry
let $author-count := count($i/reference/refinfo/authors)
let $proteinID := $i/@id
where $author-count = max($author-count)
order by $author-count descending
return ((<proteinID>{data($proteinID)}</proteinID>,
<numberOfAuthors>{data($author-count)}</numberOfAuthors>))
返回:
<proteinID>QRHUA4</proteinID>
<numberOfAuthors>47</numberOfAuthors>
<proteinID>PLHU</proteinID>
<numberOfAuthors>29</numberOfAuthors>
<proteinID>LPHUB</proteinID>
<numberOfAuthors>29</numberOfAuthors>
等等。
我只想返回的是第一个 proteinID,最高的是 47,如下所示:
<proteinID>QRHUA4</proteinID>
<numberOfAuthors>47</numberOfAuthors>
我已经尝试了一些东西,比如我的 where 语句
where $author-count = max($author-count)
但它似乎并没有真正做任何事情。 我也尝试了一些定位的东西,只选择了第一个索引,但它似乎只返回 ID QRHUA4,而不是 numberOfAuthors
好吧,您可以简单地使用 select 结果序列中的第一项
(for $i in doc("proteindb.xml")/ProteinDatabase/ProteinEntry
let $author-count := count($i/reference/refinfo/authors)
let $proteinID := $i/@id
where $author-count = max($author-count)
order by $author-count descending
return ((<proteinID>{data($proteinID)}</proteinID>,
<numberOfAuthors>{data($author-count)}</numberOfAuthors>)))[1]
或者
head(for $i in doc("proteindb.xml")/ProteinDatabase/ProteinEntry
let $author-count := count($i/reference/refinfo/authors)
let $proteinID := $i/@id
where $author-count = max($author-count)
order by $author-count descending
return ((<proteinID>{data($proteinID)}</proteinID>,
<numberOfAuthors>{data($author-count)}</numberOfAuthors>)))
for $i in //ProteinEntry[reference/refinfo/authors/count(*) =
max(//ProteinEntry/reference/refinfo/authors/count(*))
]
let $author-count := count($i/reference/refinfo/authors/author)
let $proteinID := $i/@id
return ((<proteinID>{$proteinID}</proteinID>,
<numberOfAuthors>{$author-count}</numberOfAuthors>))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.