2013-05-13 203 views
1

我需要總結特定產品類別的平均價格,目前我設法合併相同的分類類型並對它們進行計數,現在我需要總結所有不同類別的價格(目前我已經在我的查詢中選擇了所有價格)xQuery distinct-value sum issue

例如:如果有5類產品我需要選擇這5個價格並總結出來。

查詢

let $hk := doc('http://etutor.dke.uni-linz.ac.at/etutor/XML?id=1')/handelskette/produkte/produkt 

for $x in distinct-values($hk/kategorie) 
let $c := count($hk[kategorie eq $x]) 
let $a:= sum($hk/ekPreis) 

return <kategorie kname="{$x}"> 
<anzahl>{$c}</anzahl> 
<avgEkPreis>{$a div $c}</avgEkPreis> 
</kategorie> 

XML

<handelskette> 
    <produkte> 
     <produkt ean="0-666-4567-2-22"> 
      <bezeichnung>Autoschampoo</bezeichnung> 
      <kategorie>Pflege</kategorie> 
      <ekPreis>35</ekPreis> 
      <listPreis>69</listPreis> 
     </produkt> 
     <produkt ean="0-777-4997-2-43"> 
      <bezeichnung>Glanzpolitur</bezeichnung> 
      <kategorie>Pflege</kategorie> 
      <ekPreis>70</ekPreis> 
      <listPreis>119</listPreis> 
     </produkt> 
     <produkt ean="1-4444-652-8-88"> 
      <bezeichnung>CD-Wechsler</bezeichnung> 
      <kategorie>Audio</kategorie> 
      <ekPreis>2345</ekPreis> 
      <listPreis>3999</listPreis> 
     </produkt> 
    </produkte> 
</handelskette> 

我會很感激的任何幫助

回答

1

只需使用

sum(for $vCat in distinct-values(/*/*/*/kategorie), 
     $vCount in count(/*/*/produkt[kategorie eq $vCat]) 
    return 
     sum(/*/*/produkt[kategorie eq $vCat]/ekPreis/xs:double(.)) div $vCount 
    ) 

當這個XPath 2.0表達式(並且也是的XQuery)抵靠提供的XML文檔進行評估:

<handelskette> 
    <produkte> 
     <produkt ean="0-666-4567-2-22"> 
      <bezeichnung>Autoschampoo</bezeichnung> 
      <kategorie>Pflege</kategorie> 
      <ekPreis>35</ekPreis> 
      <listPreis>69</listPreis> 
     </produkt> 
     <produkt ean="0-777-4997-2-43"> 
      <bezeichnung>Glanzpolitur</bezeichnung> 
      <kategorie>Pflege</kategorie> 
      <ekPreis>70</ekPreis> 
      <listPreis>119</listPreis> 
     </produkt> 
     <produkt ean="1-4444-652-8-88"> 
      <bezeichnung>CD-Wechsler</bezeichnung> 
      <kategorie>Audio</kategorie> 
      <ekPreis>2345</ekPreis> 
      <listPreis>3999</listPreis> 
     </produkt> 
    </produkte> 
</handelskette> 

有用,正確的結果(平均價格爲每個類別總和)生產:

2397.5 
0

我沒有解釋它完全正確的道路,我的英語不太好^^。我的意思是,我需要每個類別的總結,但感謝你,我用它的部分語法完成了它。

這裏是我的查詢現在 - 如果有人有類似的問題:

let $hk := doc('http://etutor.dke.uni-linz.ac.at/etutor/XML?id=1')/handelskette/produkte/produkt 

for $x in distinct-values($hk/kategorie) 
let $c := count($hk[kategorie eq $x]) 
let $a:= sum($hk[kategorie eq $x]/ekPreis) 

return <kategorie kname="{$x}"> 
<anzahl>{$c}</anzahl> 
<avgEkPreis>{$a div $c}</avgEkPreis> 
</kategorie> 

非常感謝你,有一個美好的一週!

+0

user2374343,歡迎您。 – 2013-05-14 14:26:04

0

鑑於你的處理器處理的XQuery 3.0,你可以給group by以提高可讀性一試:

for $produkt in doc('http://etutor.dke.uni-linz.ac.at/etutor/XML?id=1')/handelskette/produkte/produkt 
    group by $kname := $produkt/kategorie 
    let $anzahl  := count($produkt) 
    let $avg_ek  := sum($produkt/ekPreis) div $anzahl 
return 
<kategorie kname="{ $kname }"> 
    <anzahl>{ $anzahl }</anzahl> 
    <avgEkPreis>{ $avg_ek }</avgEkPreis> 
</kategorie>