0

私はこれらの関係を持っています

Entry
-----
id
creationdate
grade


Subject
------
id
name

そして結合テーブル

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

特定の作成日に特定のサブジェクト (「Java」など) に属するエントリの平均グレードを見つけるには、SQL を作成する必要があります。

私は次のことを試しました

Subject 'java' の ID が 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

これを修正しようとしましたが、できませんでした

このエラーが発生する理由を誰か教えてもらえますか..私のデータベースの知識はそれほど良くありません

4

2 に答える 2

1

おそらく、ネストされた SELECT の代わりに JOIN が必要です。

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
于 2013-03-04T04:30:30.723 に答える
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';
于 2013-03-04T05:20:18.847 に答える