xquery - 如何在 Xquery 中对具有相同代码属性的多项进行求和?

标签 xquery

我在 Xquery 中进行练习时遇到问题。逻辑:

  • 获取购买次数超过5次的商品名称及其单价

这是xml文件的结构:

<shop>
    <products>
        <product code="P02">
            <name>Hard disk SSD</name>
            <price>320</price>
        </product>
        <product code="P05">
            <name>Keyboard</name>
            <price>30</price>
        </product>
        <product code="P06">
            <name>NAS</name>
            <price>400</price>
        </product>
    </products>
    <purchases>
        <quantity product="P02" client="U300111">5</quantity>
        <quantity product="P05" client="U300111">3</quantity>
        <quantity product="P05" client="U120711">1</quantity>
        <quantity product="P02" client="U120711">7</quantity>
        <quantity product="P06" client="U030512">1</quantity>
        <quantity product="P06" client="U120712">3</quantity>
        <quantity product="P02" client="U120712">1</quantity>
    </purchases>
</shop>

我现在已经这样做了:

for $x in doc("LMSGI06")/shop/purchases/quantity, $y in doc ("LMSGI06")/shop/products/product
let $z := sum($x)
where $x/@product = $y/@code and $z > 5
return  
<product>
    {$y/name}
    {$y/price}
    <sales>{$z}</sales>
</producto>

这就是结果:

<product>
    <name>Hard disk SSD</name>
    <price>320</price>
    <sales>7</sales>
</product>

我正在尝试添加产品数量,但无法添加具有相同产品代码的产品,然后在 where 子句中按购买次数超过的产品进行过滤5次。有人知道我该怎么做吗?非常感谢。

结果应该是:

<product>
    <name>Hard disk SSD</name>
    <price>320</price>
    <sales>13</sales>
</product>

最佳答案

如果您的 XQuery 版本支持,请使用group by:

for $product in /shop/products/product
let $code := $product/@code
group by $code
let $sum := sum(/shop/purchases/quantity[@product=$code])
where $sum > 5
return 
<product>
    {$product/name}
    {$product/price}
    <sales>{$sum}</sales>
</product>

或者使用distinct-values()来模拟相同的逻辑,否则:

for $code in distinct-values(/shop/products/product/@code)
let $product := /shop/products/product[@code=$code]
let $qty := /shop/purchases/quantity[@product=$code]
let $sum := sum($qty)
where $sum > 5
return  
<product>
    {$product/name}
    {$product/price}
    <sales>{$sum}</sales>
</product>

demo

关于xquery - 如何在 Xquery 中对具有相同代码属性的多项进行求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43561901/

相关文章:

xquery - 如何在marklogic中列出目录中所有文档的所有URI

xpath - 如何计算 XPath 或 XQuery 中的加权平均值?

sql-server - SQL Server XML查询: Query multiple child elements with same name

xquery - 在 XQuery 中更新计数器

intellij-idea - IntelliJ Idea 中的 Xquery 支持?

constraints - 如何根据 Marklogic 中的用户输入创建自定义日期范围?

xml - 如何修复丑陋的 XQuery 输出?

sql-server - 从 XML 列中选择所有 XML 节点

xml - xquery 中的 SUM 和 GROUP BY 以及 1 个 xml 文件

XQuery - 函数定义中的变量