2012-08-13 6 views
1

호텔 체인과 관련된 데이터가 포함 된 큰 XML 파일이 있습니다. 일별, 주별, 호텔마다 그들은 그들의 보고서에 일부 데이터를 보관 :계산 된 평균의 평균

<Report week="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="report.xsd"> 
     <Days> 
      <Day id="1" naam="Monday"> 
       <Hotels> 
        <Hotel id="1" naam="Bonotel Antwerp"> 
         <Stays> 
          <Stay id="1"> 
           <Room id="1" number="1"/> 
           <Roomtype id="1" naam="oneperson" price="20.00"/> 
           <Period id="1" naam="lowseason" price="20.00"/> 
           <Formula id="1" naam="roomandbreakfast" price="20.00"/> 
           <Facilities> 
            <Facility id="1" naam="swimming" price="5.00"/> 
            <Facility id="2" naam="golf" price="20.00"/> 
           </Facilities> 
           <Guest id="1" naam="John Williams"/> 
          </Stay> 
          <Stay id="2"> 
           <Room id="2" number="2"/> 
           <Roomtype id="1" naam="oneperson" price="20.00"/> 
           <Period id="1" naam="lowseason" price="20.00"/> 
           <Formula id="1" naam="roomandbreakfast" price="20.00"/> 
           <Facilities> 
            <Facility id="2" naam="golf" price="20.00"/> 
            <Facility id="3" naam="minibar" price="10.00"/> 
           </Facilities> 
           <Guest id="2" naam="Ray Kurzweil"/> 
          </Stay> 
          <Stay id="3"> 
           <Room id="3" number="3"/> 
           <Roomtype id="2" naam="twoperson" price="40.00"/> 
           <Period id="1" naam="lowseason" price="20.00"/> 
           <Formula id="2" naam="halfpension" price="30.00"/> 
           <Facilities> 
            <Facility id="4" naam="tennis" price="20.00"/> 
            <Facility id="4" naam="tennis" price="20.00"/> 
           </Facilities> 
           <Guest id="3" naam="Stephen Hawking"/> 
          </Stay> 
         </Stays> 
        </Hotel> 
(: ... Other Hotels ... :) 
       </Hotels> 
      </Day> 
(: ... Other Days ... :) 
     </Days> 
    </Report> 

XQuery를 사용하여, 나는이 평균 손님이 지출 무엇을 계산해야합니다. Roomtype 가격, Periode 가격, Formula 가격 및 시설 합계입니다. 나는이 XQuery를 함께했다 :이 결과를 생성

xquery version "1.0"; 
<ReportResult week="1"> 
{ 
    for $x in (1 to 7) 
    return 
     for $stays in doc("report.xml")//Report/Days/Day[@id=$x]/Hotels/Hotel[@id=1]/Stays 
     let $average := avg(
      for $v in $stays/Stay 
       return sum($v/Roomtype/@price) + sum($v/Facilities/Facility/@prijs) + sum($v/Formula/@price) + sum($v/Period/@price) 
     )   
     return 
     <AverageSpending hotel="Bonotel Antwerpen" day="{data($x)}"> 
      {data(round-half-to-even($average, 2))}  
     </AverageSpending> 
    } 
</Reportresult> 

내가 기대 :

<Reportresult week="1"> 
    <Averagespending hotel="Bonotel Antwerpen" day="1">101.67</AverageSpending> 
    <Averagespending hotel="Bonotel Antwerpen" day="2">321.67</AverageSpending> 
    (: ... etc... :) 
    <Averagespending hotel="Bonotel Antwerpen" day="2">255</AverageSpending> 
</Reportresult> 

그러나 나는 또한 전체 평균을 계산하고 싶습니다. 그래서 모든 평균의 합이

<TotalAverage>198,67</TotalAverage> 

같은 출력 뭔가 7 일 나눈하지만 문제가이 전체 평균을 계산하는 데 문제가 있습니다. 자바에서는 총 변수를 사용하고 각 루프의 계산 된 평균을 사용하여 증가 시키지만 분명히 여기서는 작동하지 않습니다. XQuery로 어떻게이 작업을 수행 할 수 있습니까? 감사.

+0

작업 및/또는 제공하기 위해 우리에게 몇 가지 예제 데이터를 제공하세요 데이터가 필요없는 좀 더 추상적 인 예. –

+0

완료. 제발 편집하십시오. – Matthias

답변

2

예를함으로써 당신은 변수에 요청의 첫 번째 부분을 할당 할 수 있습니다 그것에 전체 평균을 계산하고 모두 결과 CONCAT :

xquery version "1.0"; 
<ReportResult week="1"> 
{ let $averages := 
for $x in (1 to 7) 
return 
    for $stays in doc("report.xml")//Report/Days/Day[@id=$x]/Hotels/Hotel[@id=1]/Stays 
    let $average := avg(
     for $v in $stays/Stay 
      return sum($v/Roomtype/@price) + sum($v/Facilities/Facility/@prijs) + sum($v/Formula/@price) + sum($v/Period/@price) 
    )   
    return 
    <AverageSpending hotel="Bonotel Antwerpen" day="{data($x)}"> 
     {data(round-half-to-even($average, 2))}  
    </AverageSpending> 
return ($averages,<TotalAverage>{avg($averages)}</TotalAverage>) 
</Reportresult> 
+0

Brilliant! 고맙습니다. – Matthias