1

我正在尝试将以下 MySQL Query 等同于 XQuery

SELECT S.Classification, COUNT(S.Classification) AS "No. Students", AVG(S.GPA) AS "AVG
    Class. GPA"
FROM Student S
GROUP BY S.Classification
ORDER BY S.Classification ASC;

这输出:http: //i.stack.imgur.com/Iu0d4.png

我的数据库如下所示:

CREATE TABLE 'Student' (
'StudentID' CHAR(9) NOT NULL,
'Classification' CHAR(10) NULL DEFAULT NULL,
'GPA` DOUBLE NULL DEFAULT NULL,
'MentorID' CHAR(9) NULL DEFAULT NULL,
'CreditHours' INT(11) NULL DEFAULT NULL,
PRIMARY KEY ('StudentID')
)

在 XML 中:

<Document>
  <Table>
    <StudentID>118784412</StudentID>
    <Classification>Sophomore</Classification>
    <GPA>3.19</GPA>
    <MentorID>201586985</MentorID>
    <CreditHours>39</CreditHours>
  </Table>
</Document>

我不确定如何在 xquery 中使用 count() 和 avg()。我从哪说起呢?任何帮助表示赞赏,谢谢。

4

1 回答 1

2

您可以使用 XQuery 3.0 中定义的 group by 运算符轻松实现此目的。假设给定的 xml 在变量$doc中并且数据库的每一行都在另一个<Table />节点中,您可以这样做:

for $student in $doc/Table
let $classification := $student/Classification
group by $classification
order by $classification
return 
  <output>
    <Classification>{$classification}</Classification>
    <NoStudents>{count($student)}</NoStudents>
    <AvgGPA>{avg($student/GPA)}</AvgGPA>
  </output>

有许多(优秀的)XQuery 处理器支持 XQuery 3.0,例如BaseXeXistZorba

于 2012-11-16T14:43:53.983 回答