【问题标题】:Xquery - Count elementsXquery - 计算元素
【发布时间】:2018-11-30 02:53:24
【问题描述】:

如何返回一个字符串序列?

【问题讨论】:

    标签: xquery


    【解决方案1】:

    XQuery 自 2014 年起支持您可以使用的 group by 子句:

    for $dept at $pos in //building[year = '1900']/department
    group by $key := $dept
    order by $pos[1]
    return ($key || ' ' ||  count($dept))
    

    https://xqueryfiddle.liberty-development.net/gWcDMen

    如果您没有 XQuery 3 支持,您可以使用

    let $dept := //building[year = '1900']/department
    for $dist-dept in distinct-values($dept)
    return 
        concat($dist-dept, ' ', count($dept[. = $dist-dept]))
    

    https://xqueryfiddle.liberty-development.net/gWcDMen/1

    【讨论】:

    • count($dept[. = $dist-dept] 你能告诉我这个,不明白为什么。 = $dist-dept
    • @SUIIIIII,首先我建议使用 XQuery 3 与group by 分组的方法。如果您真的坚持使用 XQuery 1,那么表达式 $dept 会选择 $dept[. = expression] 这样的谓词中的 department 元素序列,将 $dept 序列中每个元素的值与表达式中的值进行比较,在我建议的方法中,使用的表达式是前面用distinct-values 计算的结果,也就是说,它是一系列不同的部门名称字符串。
    • 并且在 XPath 和 XQuery 中,如果 $a 中的至少一项等于 $b 中的至少一项,那么在 XPath 和 XQuery 中任何比较 $a = $b 为真,因此对于 for $dist-dept in distinct-values($dept) return count($dept[. = $dist-dept]),结果是一个序列每个不同部门值的部门计数的整数。
    • 好的,非常感谢。我实际上不允许使用 XQuery 3。我的逻辑方法是相同的,除了 [. = $x]。
    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2021-08-25
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多