PERSON_IDに基づいて2つのテーブルを結合し、数値のみを含む各person_IDの平均成績の平均を収集する必要があります。 2つの表は、学生と成績と呼ばれます。列PERSON_ID、ENROLL_PERIOD、およびGRADEを結合する必要があります。
これまで私は試しました
select students.PERSON_ID, students.ENROLL_PERIOD, AVG(Cast(grades.GRADE as numeric))
from Students
INNER JOIN Grades on Students.PERSON_ID = Grades.PERSON_ID
where ENROLL_PERIOD IS NOT NULL AND ENROLL_PERIOD <> ''
Order by ENROLL_PERIOD ASC
GROUP BY PERSON_ID,ENROLL_PERIOD
エラーが発生しています:
Incorrect syntax near the keyword 'GROUP'. [156] (severity 15)
テーブルは次のようになります。
PERSON ID : ENROLL_PERIOD : GRADE
_________________________________
12401 : 109 : 4
12401 : 109 : 7
12401 : 109 : B
43245 : 112 : 12
43245 : 112 : IB
正しい方向に向かっているのかどうかはわかりませんので、誰か助けていただければ幸いです。私はMS SQLが初めてです。
回答 3 件
並べ替える前に、group by構文を配置する必要があります。
https://blog.sqlauthority.com/2007/06/14/sql-server-easy-sequence-of-select-from-join-where-group-by-having-order-by/からの引用
SQL構文の順序:
SELECT yourcolumns FROM tablenames JOIN tablenames WHERE condition GROUP BY yourcolumns HAVING aggregatecolumn condition ORDER BY yourcolumns
select students.PERSON_ID, students.ENROLL_PERIOD, AVG(Cast(grades.GRADE as numeric)) from Students INNER JOIN Grades on Students.PERSON_ID = Grades.PERSON_ID where ENROLL_PERIOD IS NOT NULL AND ENROLL_PERIOD <> '' GROUP BY students.PERSON_ID,students.ENROLL_PERIOD Order by students.ENROLL_PERIOD ASC
注文はグループの後にする必要があります
最後のステートメントとして注文する必要があります。 また、非数値をすべてavg関数で使用する前に除外する必要があります。
たぶんこのようなもの
これにより、次の結果が返されます
編集:
実際のテーブルでは、おそらく次のようになります。