1

以下のような 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>
4

2 に答える 2

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 最高です ^^

于 2012-10-06T07:42:12.383 に答える
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)}"/>
于 2012-10-06T17:15:42.670 に答える