订单无法工作

时间:2012-10-06 07:13:03

标签: xml

我有一个像下面这样的xml文件,我想将toyID分组并获得该玩具销售量的总和。并通过最高销售额的toyID订购。但我写的代码能够计算出售玩具的数量,但是销售的玩具数量最多的订单不起作用。我知道哪个部分我做错了?

 ToySale.XML
 <toySale companyID="1" toyID="11" >
   <amount>15</amount>
 </toySale>
 <toySale companyID="3" toyID="11" >
   <amount>12</amount>
 </toySale>
 <toySale companyID="1" toyID="22" >
   <amount>3</amount>
 </toySale>
 <toySale companyID="2" toyID="33" >
   <amount>7</amount>
 </toySale>

下面是我写的代码:

for $t in distinct-values(ToySale.xml")//@toyID)
return <toyID>
            toyID : {$t} 

          <totalSale>{sum(for $sum in (ToySale.xml")//toySale
                     order by $sum/@toyID/../amount     
                     where $t=$sum/@toyID
                     return $sum/@productID/../amount)  }

           </totalSale

        </toyID>

2 个答案:

答案 0 :(得分:0)

(:
     Find total sales of each toy sold!

     I tried this query here!   http://www.zorba-xquery.com/html/demo
 :)
let $xml := (
    <toySales>
        <toySale companyID="1" toyID="11" >
            <amount>15</amount>
        </toySale>
        <toySale companyID="3" toyID="11" >
            <amount>12</amount>
        </toySale>
        <toySale companyID="1" toyID="22" >
            <amount>3</amount>
        </toySale>
        <toySale companyID="2" toyID="33" >
            <amount>7</amount>
        </toySale>
    </toySales>
)

let $toy-sales := $xml//toySale
for $toy-id in distinct-values($xml//@toyID)
let $total-amount-sold := fn:sum($toy-sales[@toyID = $toy-id]/amount)
return (

   element toy-sale {       
        attribute toy-id { $toy-id },
        text { 
            fn:concat("Total amount sold: ", $total-amount-sold)        
        }
   }
)

返回

<toy-sale toy-id="11">Total amount sold: 27</toy-sale>
<toy-sale toy-id="22">Total amount sold: 3</toy-sale>
<toy-sale toy-id="33">Total amount sold: 7</toy-sale>

xquery#1最好^^

答案 1 :(得分:0)

此查询

   for $vId
     in (/*/toySale/@toyID)
                     [index-of(/*/toySale/@toyID, .)[1]]

    let $vSales := /*/toySale[@toyID eq $vId]

    order by sum($vSales/amount) descending

   return
     <sale toy-id="{$vId}" total="{sum($vSales/amount)}"/>

应用于提供的XML文档

<toySales>
    <toySale companyID="1" toyID="11" >
        <amount>15</amount>
    </toySale>
    <toySale companyID="3" toyID="11" >
        <amount>12</amount>
    </toySale>
    <toySale companyID="1" toyID="22" >
        <amount>3</amount>
    </toySale>
    <toySale companyID="2" toyID="33" >
        <amount>7</amount>
    </toySale>
</toySales>

生成想要的正确结果

<sale total="27" toy-id="11"/>
<sale total="7" toy-id="33"/>
<sale total="3" toy-id="22"/>

等效且稍短的查询

   for $vId in distinct-values(/*/toySale/@toyID)

     let $vSales := /*/toySale[@toyID eq $vId]

     order by sum($vSales/amount) descending

    return
       <sale toy-id="{$vId}" total="{sum($vSales/amount)}"/>