2012-09-18 114 views
0

架構:這個sql查詢是否正確?如果不正確,我該如何解決?

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; 

我想知道,如果邏輯上是正確的,而不是語法。

+2

請提供樣本數據和期望的輸出。 – RedFilter

回答

1

下面是關於您的查詢的一些提示:

  1. 小心你的表的別名。確保您將它們帶到您的SELECT
  2. 您只能在您的聚合中使用的SELECT中包含列(GROUP BY)。因此,你不能GROUP BY temp1.ageSELECT age, name
+0

確實,需要將temp1.name添加到最後一個「group by」。 (我沒有太在意語法。) –

0

您的SQL背後的邏輯看上去結實對我來說,只要「時代」關聯到「年齡組」,而不是指個別學生的年齡。