0

ビュー VIEW UOS_VU_STUDENT_AVERAGE を作成する必要があります。列の 1 つは平均 GRADE、SQL を要求します。

CREATE VIEW UOS_VU_STUDENT_AVERAGE AS
SELECT STUDENT.FIRST_NAME, STUDENT.LAST_NAME, STUDENT_MODULE.GRADE
FROM STUDENT, STUDENT_MODULE
WHERE STUDENT_ID<120000001 

このSQLで平均成績を取得するにはどうすればよいですか?

4

3 に答える 3

1

試す

CREATE VIEW UOS_VU_STUDENT_AVERAGE AS
SELECT STUDENT.FIRST_NAME, STUDENT.LAST_NAME, avg(STUDENT_MODULE.GRADE)
FROM STUDENT, STUDENT_MODULE
WHERE STUDENT_ID<120000001 
group by STUDENT.FIRST_NAME, STUDENT.LAST_NAME

zerkms がコメントしたように、結合条件はありません。おそらく次のようなものが必要です。

CREATE VIEW UOS_VU_STUDENT_AVERAGE AS
SELECT STUDENT.FIRST_NAME, STUDENT.LAST_NAME, avg(STUDENT_MODULE.GRADE)
FROM STUDENT join STUDENT_MODULE on student_module.STUDENT_ID = student.id
WHERE STUDENT_ID<120000001 
group by STUDENT.FIRST_NAME, STUDENT.LAST_NAME

(FKがオンになっていると推測していますstudent_module.STUDENT_ID = student.id

于 2013-05-09T11:24:25.717 に答える
0

次のようなことをする必要があります。テーブルの構造についていくつかの仮定を立てました。

CREATE VIEW uos_vu_student_average AS
SELECT first_name, last_name,  AVG(grade) avg_grade
  FROM student, student_module
 WHERE student.student_id = student_module.student_id
   AND student.student_id < 120000001
 GROUP BY first_name, last_name;

あなたの例では、以前のポスターで指摘されたように、元の例には結合がないため、student_id に関係なく、すべての成績を平均するだけです。結果は、全員が同じ平均成績を持つことを示します。

ビュー内で集計関数を実行する場合は、結果の列にエイリアスを割り当てる必要もあります。これにより、ビューに対して DML を実行するときに何らかの方法でそれを参照できます。この場合、avg_grade を割り当てました。

于 2013-05-09T11:53:51.817 に答える
0

次のような数学関数には「グループ化」を使用する必要があります

AVG ( [ ALL | DISTINCT ] expression )

例えば ​​..

SELECT id, AVG(salary) from tablename GROUP BY filedname
于 2013-05-09T11:29:33.083 に答える