我的XML文档如下所示:
<books>
<book><author>A</author></book>
<book><author>B</author></book>
<book><author>C</author></book>
<book><author>B</author></book>
<book><author>C</author></book>
</books>
现在,查询应该返回具有最多书籍的作者的姓名。在这种情况下B,C
(因为它们都有2本书)。问题是,它必须只有一个查询,所以在这种情况下找到最大值(2)然后搜索有2本书的作者是不可接受的解决方案。
答案 0 :(得分:3)
作者分组并将即时结果与其出版物的数量一起存储。然后过滤以仅返回具有最大发布计数的作者。
let $authors :=
for $book in //book
let $author := $book/author
group by $author
return <author count="{ count($book) }">{ $author }</author>
return $authors[@count = max($authors/@count)]/data()