我有一个像下面这样的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>
答案 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)}"/>