3

コース(cid、cname、description)

教授(pid、pname)

教育(tid、cid、pid、year、semester、department)

学生(sid、lname、fname、b_date、department)

Enrolled_stud(sid、tid、enrollment_date、grade、grade_date)

質問:平均が最も高いすべての学生の名前を照会します。

SELECT a.sname,a.avg
FROM (SELECT s1.sname,avg(e.grade)AS avg
      FROM Students s1
      NATURAL JOIN EnrolledStudents e
      GROUP BY s1.sid
      ) as a
where a.avg=(select max(a.avg))

あなたは私が私のSQLFIDDLEで得た結果を見ることができます、そしてあなたは私が何か間違ったことをしていたのを見ることができます、そして私は何も得られません!それはすべて私には正しいようです...

4

2 に答える 2

1

勉強になるので、先にヒントを載せておきます。where句について考えてみてください -a現在の行です。もちろんa.avg等しいmax(a.avg)

アップデート

次のことを試してください。

SELECT s1.sname, avg(e.grade) AS avg
FROM Students s1
NATURAL JOIN EnrolledStudents e
GROUP BY s1.sid
HAVING avg = (SELECT avg(e.grade) AS avg 
  FROM EnrolledStudents e
  GROUP BY e.sid ORDER BY avg DESC LIMIT 1);
于 2012-07-03T14:46:32.910 に答える
0

うまく機能するより見栄えの良い答えを誰も持っていない場合、これが最良の答えになります。

SELECT s.sname
FROM Students s
NATURAL JOIN EnrolledStudents e
GROUP BY s.sid
HAVING avg(e.grade) >= ALL(SELECT AVG(e.grade)
      FROM  EnrolledStudents e
      GROUP BY e.sid)
于 2012-07-03T15:14:44.063 に答える