2013-03-04 50 views
0

我有這些關係編寫SQL找到聚集

Entry 
----- 
id 
creationdate 
grade 


Subject 
------ 
id 
name 

和連接表

Entry_Subjects 
------------ 
entry_id 
subject_id 

我需要創建SQL找到屬於某一特定主題條目的平均成績(比如「的java 「)上的特定creationdate

我嘗試以下

假設ID爲主題的Java'是2

SELECT creationdate, 
    avg(grade) 
FROM (SELECT * 
    FROM Entry 
    WHERE id IN 
     (SELECT id 
      FROM Entry_Subjects 
      WHERE subject_id =2 
     ) 
    ) 
GROUP BY creationdate; 

我得到的錯誤

subquery in FROM must have an alias 

我試圖糾正這一點,但不能

有人可以告訴我爲什麼這個錯誤發生..我的分貝知識不是那麼好

+1

您可能需要做一個連接,並取平均值,而不是一個子查詢完成。 – 2013-03-04 04:22:44

回答

1

可能想要連接而不是嵌套的SELECTs。

SELECT 
    creationdate, 
    AVG(grade) 
FROM Entry e 
INNER JOIN Entry_Subjects f 
    ON e.id = f.entry_id 
INNER JOIN Subject s 
    ON f.subject_id = s.id 
WHERE s.name = 'java' --this is where you replace 'java' with a variable to search by name 
GROUP BY creationdate 
0

還可以使用分析功能

select a.creationdate,avg(a.grade) over (partition by a.creationdate order by a.creationdate) as avg_grade 
from entry a,subject b,entry_subjects c 
where a.id=c.entry_id and b.id=c.subject_id 
and upper(b.name)='JAVA';