You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写XQuery查询计算每门课程的成绩平均值?

正确的XQuery查询实现课程成绩平均值计算

给定的XML数据源

<?xml-stylesheet href="class3.xsl" type="text/xsl" ?>
<school>
    <student>
        <name>Jack T</name>
        <course title="INF8430" note="78"/>
        <course title="INF1030" note="69"/>
        <course title="INF1230" note="85"/>
    </student>
    <student>
        <name>Marty L</name>
        <course title="INF8430" note="95"/>
        <course title="INF1030" note="82"/>
        <course title="INF1230" note="77"/>
    </student>
    <student>
        <name>Ben L</name>
        <course title="INF9430" note="59"/>
        <course title="INF1030" note="78"/>
        <course title="INF1230" note="79"/>
    </student>
</school>

原有代码的问题

用户提供的代码无法正常运行,问题点如下:

  • 文件名拼写错误:tesst.xml多了一个s,应为test.xml(假设实际文件名为此)
  • return语句后不能直接返回两个独立表达式,需将结果合并为一个节点结构
  • 标签语法错误:<course title="{$s},"/></course>是无效写法,自闭合标签后无需额外添加闭合标签
  • 未将@note属性转换为数值类型,直接用avg()处理字符串可能导致计算异常

原有错误代码:

for $s in distinct-values(doc("tesst.xml")//course/@title)
return
 avg(doc("tesst.xml")//course[@title=$s]/@note)
 <course title="{$s},"/></course>

正确的XQuery代码

<maliste>
{
    for $courseTitle in distinct-values(doc("test.xml")//course/@title)
    let $notes := doc("test.xml")//course[@title = $courseTitle]/@note/xs:decimal(.)
    let $average := avg($notes)
    return
        <cours sigle="{$courseTitle}">{$average}</cours>
}
</maliste>

代码说明

  • 外层包裹<maliste>根节点,与期望输出结构匹配
  • 使用distinct-values()获取所有唯一的课程标题
  • 将每个课程的note属性转换为xs:decimal类型,确保数值计算准确
  • 计算该课程所有成绩的平均值,生成对应的<cours>节点,包含课程代码和平均值

正确输出(修正原期望输出笔误)

<maliste>
       <cours sigle="INF8430">86.5</cours>
       <cours sigle="INF1030">76.33333333333333</cours>
       <cours sigle="INF1230">80.33333333333333</cours>
       <cours sigle="INF9430">59</cours>
</maliste>

注:原期望输出中INF9430的平均值39为笔误,数据源里只有Ben L的该课程成绩59,正确平均值应为59。

内容的提问来源于stack exchange,提问作者david9999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:35:24