Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对Xquery中具有相同代码属性的几个项求和?_Xquery - Fatal编程技术网

如何对Xquery中具有相同代码属性的几个项求和?

如何对Xquery中具有相同代码属性的几个项求和?,xquery,Xquery,我对Xquery中的一个练习有问题。逻辑是: 获取购买次数超过5次的产品名称及其单价 这是xml文件的结构: <shop> <products> <product code="P02"> <name>Hard disk SSD</name> <price>320</price> </product>

我对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>

硬盘SSD
320
键盘
30
NAS
400
5.
3.
1.
7.
1.
3.
1.
我现在已经这样做了:

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>
对于单据中的$x(“LMSGI06”)/商店/采购/数量,单据中的$y(“LMSGI06”)/商店/产品/产品
设$z:=总和($x)
其中$x/@product=$y/@code和$z>5
回来
{$y/name}
{$y/价格}
{$z}
这就是结果:

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

硬盘SSD
320
7.
我试图添加产品的数量,但我无法添加具有相同产品代码的产品,然后在where条款中,通过购买超过5次的产品添加到过滤器。有人知道我该怎么做?多谢各位

结果应该是:

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

硬盘SSD
320
13

如果您的XQuery版本支持,请使用
分组依据

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>

可以简化@har07的解决方案:

for $product in /shop/products/product
let $sum := sum(/shop/purchases/quantity[@product=$product/code])
where $sum > 5
return 
<product>
    {$product/name}
    {$product/price}
    <sales>{$sum}</sales>
</product>
用于$product in/shop/products/product
let$sum:=sum(/shop/purchases/quantity[@product=$product/code])
其中$sum>5
回来
{$product/name}
{$product/price}
{$sum}

我怀疑product/@code是唯一的,它是唯一可以有重复项的quantity/@产品。所以这里的分组是多余的。
for $product in /shop/products/product
let $sum := sum(/shop/purchases/quantity[@product=$product/code])
where $sum > 5
return 
<product>
    {$product/name}
    {$product/price}
    <sales>{$sum}</sales>
</product>