如何在Xquery中添加for循环?

如何在Xquery中添加for循环?,xquery,Xquery,我对Xquery中的一个练习有问题 以下是练习: 如果所有课程的学额都完成了,那么每个以迈克尔名字开头的老师每个月都会得到什么(总数) 这是xml文件: <shop> <training> <course id="1"> <name>Java</name> <price fee="Monthly">27</price> <places>20</places

我对Xquery中的一个练习有问题

以下是练习:

如果所有课程的学额都完成了,那么每个以迈克尔名字开头的老师每个月都会得到什么(总数)

这是xml文件:

<shop>
<training>
  <course id="1">
      <name>Java</name>
      <price fee="Monthly">27</price>
      <places>20</places>
      <teacher>Michael James</teacher>
  </course>
  <course id="2">
      <name>Android</name>
      <price fee="Monthly">47</price>
      <places>15</places>
      <teacher>Michael Pit</teacher>
  </course>
  <course id="3">
      <name>SEO</name>
      <price fee="Monthly">37</price>
      <places>55</places>
      <teacher>Michael Smith</teacher>
  </course>
  <course id="4">
      <name>HTML</name>
      <price fee="Monthly">99</price>
      <places>10</places>
      <teacher>Michael Kit</teacher>
  </course>
  <course id="5">
      <name>CSS</name>
      <price fee="Monthly">749</price>
      <places>5</places>
      <teacher>George Pet</teacher>
  </course>

JAVA
27
20
迈克·詹姆斯
安卓
47
15
迈克尔·皮特
搜索引擎优化
37
55
迈克尔·史密斯
HTML
99
10
迈克尔·基特
CSS
749
5.
乔治宠物

我正在尝试这样做:

` for $x in doc("LM")//course[starts-with(teacher, "Michael")]
let $monthly-profits-by-course := $y/places * $y/price
let $total-profits := sum($monthly-profits-by-course) 
return 
<courses>
    <michael_profits>{$total-profits}</michael_profits>
</courses>`
`doc(“LM”)//课程[以(老师,“迈克尔”)开头]
按课程划分的每月利润:=$y/名额*$y/价格
let$利润总额:=总额(按课程划分的每月利润)
返回
{$利润总额}
`
结果是:

<courses>
<michael_profits>540</michael_profits>
</courses>
<courses>
<michael_profits>705</michael_profits>
</courses>
<courses>
<michael_profits>2035</michael_profits>
</courses>
<courses>
<michael_profits>990</michael_profits>
</courses>

540
705
2035
990

它按课程列出了每月的利润,但我需要总利润,我不知道如何才能做到这一点。我试过用“let”代替“for”,但这不允许我用价格乘以位置,我不知道为什么。谁能帮我一下吗?非常感谢。

您的
$monthly proficient by course
将始终是单个值,而不是迭代每个课程时的序列。因此,
总额(按课程划分的月利润)
将等于
按课程划分的月利润
本身。你们想要的是像你们已经做过的那个样,每个老师都能获得一系列的利润:

for $x in doc("LM")//course[starts-with(teacher, "Michael")]
return $y/places * $y/price
然后计算所有这些值的总和。结合起来,这看起来像:

let $all-sums :=
  for $x in doc("LM")//course[starts-with(teacher, "Michael")]
  return $y/places * $y/price
return sum($all-sums)
您可以将其简化为:

sum(
  for $x in doc("LM")//course[starts-with(teacher, "Michael")]
  return $y/places * $y/price
)
如果您的XQuery教授支持XQuery 3.0,您可以使用map
运算符并写入:

sum(doc("LM")//course[starts-with(teacher, "Michael")] ! (./places * ./price))

请包括您已经尝试过的代码。此外,请遵循中的其他建议。