1

次の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() を使用する方法がわかりません。どこから始めればよいですか?どんな助けでも大歓迎です、ありがとう。

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>

BaseXeXistZorbaなど、 XQuery 3.0 をサポートする (優れた) XQuery プロセッサは多数あります。

于 2012-11-16T14:43:53.983 に答える