1

私は大学で SQL を勉強していて、この演習を練習していて行き詰まりました。特定の授業で学生が合格したすべての試験を保存するデータベースがあります。

データベース内のテーブルは次のとおりです。

   Student(**number**, name, birthday)

   Exam(**student_number**, **teaching_code**, vote)  *(store the exams passed by the students with vote)*

   Teaching(**code**, name)

number は Student テーブルの主キー、code は Teaching の場合、"student_number" は Student の "number" を参照し、"teaching_code" は Teaching の "code" を参照します。

この演習では、平均点が最も高い生徒の番号を選択するように求められます。

各学生の平均を含むテーブルを提供するクエリの書き方は知っていますが、その中から最高のものを選択する方法や、対応する学生数を表示する方法がわかりません!

一部の学生が同じ最高平均を持っている場合、制限コマンドを使用したソリューションは機能しません...

生徒ごとの平均点を表示するクエリは次のとおりです。

select  avg(e.vote) as Average from STUDENT s, EXAM e
where s.number = e.student_number
group by s.number

編集: SQL で MAX 関数を試しました。これを試しました:

select  MAX( avg(e.vote) ) as Average from STUDENT s, EXAM e
where s.number = e.student_number
group by s.number

しかし、「エラーコード:1111。グループ機能の使用が無効です」と表示されます

おそらく解決策はネストされたクエリを使用することですが、私はそれを実現できません。

4

3 に答える 3

0
select student_code, MAX(avg_vote)
FROM (
    SELECT student_code, AVG( vote) as avg_vote
    FROM Exam
    GROUP BY student_Code ) t
GROUP BY student_code

I didn't checked that query. May query to select that max average is be like that

于 2012-07-26T14:44:19.143 に答える
0

残念なことに、MySQL は CTE をサポートしていないようですが、これはとても簡単なことでした。

select t.student_code, t.avg_vote
FROM (SELECT student_code, AVG(vote) as avg_vote
      FROM Exam
      GROUP BY student_Code) t
WHERE t.avg_vote = (select max(avg_vote) 
                    FROM (SELECT student_code, AVG(vote) as avg_vote
                          FROM Exam
                          GROUP BY student_Code))

熱心に勉強を続けてください。ありそうな答えを提示されることは、実際に自分で結論に達するよりもはるかに役に立ちません。実際、運が良ければ、私の提案はうまくいかないでしょう (私はテストしていません) ので、自分で適切な変更を考え出す必要があります!

于 2012-07-26T17:58:53.730 に答える
0

SELECT MAX(Expression) FROM tables WHERE Condition

使用方法と最高値の検索方法に関するドキュメントを確認できます。MAX

TOP5 か 10 か 20のいずれかを選択したい場合は、 TOP句を使用します。

于 2012-07-26T14:37:44.043 に答える