0

架构:

Student(studentid,name,age)
Course(coursename,dept)
enroll(studentid,course,grade)

我需要找到,对于每个年龄组的学生,找到他们所学的政治学和历史课程的平均成绩,并返回每个年龄组平均成绩最高的学生姓名

到目前为止,我的尝试是:

select max(grade), age, name
from (
    select name, age, grade
    from student s, (
            select avg(grade) as grade, e.studentid
            from enroll e
            where dname in ('Political Sciences', 'History')
            group by studentid
            ) as temp
    where s.studentid = temp.studentid
) temp1
group by temp1.age;

我想知道它在逻辑上是否正确,而不是语法上。

4

2 回答 2

1

以下是有关您的查询的一些提示:

  1. 小心你的表别名。确保将它们带到您的SELECT
  2. 您只能SELECT在您的聚合中包含正在使用的列 ( GROUP BY)。因此,你不能GROUP BY temp1.ageSELECT age, name
于 2012-09-18T18:04:44.230 回答
0

你的 SQL 背后的逻辑在我看来很可靠,只要“年龄”与“年龄组”相关,而不是指个别学生的年龄。

于 2012-09-18T18:05:28.420 回答