XQuery分组和查找最大值

时间:2013-02-14 20:51:34

标签: xml group-by xquery grouping

我的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本书的作者是不可接受的解决方案。

1 个答案:

答案 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()