MySQL查询到XQuery

时间:2012-11-15 02:21:44

标签: mysql xml xquery xquery-sql

我正在尝试将以下MySQL查询等效于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()。 我从哪里开始?感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用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