2017-04-24 3 views
-1

私は以下の3つのテーブルを持っています。学生ID、学生名、各生徒の平均点を示すステートメントを書いてみたい。テーブルを見てください:MySQLの各学生の平均点を計算する別の方法は?


Grade_table

student_ID courses_names  how many_times   grade 
91110010003  MCB     1     7 
91110010003  THDC    1     8 
91110010003  THVP    1     9.5 
91110010004  MCB     1     4.5 
91110010004  THDC    1     5.5 
91110010004  THVP    1     10 

コーステーブル

Courses_ID courses names  period of time 
    CSDL   database    30 
    MCB   Basic network   30 
    THDC  Basic computers   45 
    THVP  Concepts of office   45 
    XLA   Photoshop    45 

Studentテーブル

studentID   fullname  gender   DOB   classID 
91110010003   A    M   03/03/1993  25CCHT02 
91110010004   B    M   08/03/1993  25CCHT02 
91110010005   C    M   04/14/1991  25CCHT02 
93510010005   D    M   07/27/1993  25CCDH02 
93510010008   E    F   03/10/1993  25CCDH02 
93510010009   F    M   06/09/1990  25CCDH02 
93510010010   G    M   18/12/1989  25CCDH02 
99510170307   H    M   05/06/1991  25CCDH02 
99510180112   L    M   07/12/1992  25CCDH02 
99510180150   M    M   22/03/1993  25CCDH02 
+0

1。 2.「各学生の平均点」はどういう意味ですか?おそらく平均等級ですか? –

+0

各生徒の平均点?? –

+0

申し訳ありませんが、私は学生テーブルを追加しました – Bobby

答えて

0

次...

SELECT Student_table.studentID, 
     Student_table.fullname, 
     COALESCE(CAST(AVG(grade) AS DECIMAL(11, 2)), 'N/A') AS average_grade 
FROM Student_table 
LEFT JOIN Grade_table ON Student_table.studentID = Grade_table.student_ID 
GROUP BY Student_table.studentID; 

この文はstudent_IDの彼らの共通の価値観にStudent_tableGrade_tableLEFT JOINを実行することにより開始してみてください。この演習ではCourses_tableは必要ありません。

次に、得られたデータセットを各生徒別にグループ化し、AVG()機能を使用して各生徒の平均平均を計算します。生徒にGrade_tableの項目がない場合、AVG()NULLの値を返します。 COALESCE()AVG()NULLの値を返し、NULLの値が返された場合はN/Aを返した場合平均平均を返します。

ご不明な点がございましたら、お気軽にコメントを投稿してください。

補遺

私は次のスクリプトを使用して作成されたデータセットに対して、私の文をテストしている...あなたが提供するテーブルには列 `学生NAME`はありません

CREATE TABLE Grade_table 
(
    student_ID  LONG, 
    courses_names VARCHAR(5), 
    how_many_times INT, 
    grade   DOUBLE 
); 
INSERT INTO Grade_table (student_ID, 
          courses_names, 
          how_many_times, 
          grade) 
VALUES (91110010003, 'MCB', 1, 7), 
     (91110010003, 'THDC', 1, 8), 
     (91110010003, 'THVP', 1, 9.5), 
     (91110010004, 'MCB', 1, 4.5), 
     (91110010004, 'THDC', 1, 5.5), 
     (91110010004, 'THVP', 1, 10); 
CREATE TABLE Student_table 
(
    studentID LONG, 
    fullname  VARCHAR(50), 
    gender  CHAR(1), 
    DOB   DATE, 
    classID  CHAR(8) 
); 
INSERT INTO Student_table (studentID, 
          fullname, 
          gender, 
          DOB, 
          classID) 
VALUES (91110010003, 'A', 'M', '1993-03-03', '25CCHT02'), 
     (91110010004, 'B', 'M', '1993-03-08', '25CCHT02'), 
     (91110010005, 'C', 'M', '1991-04-14', '25CCHT02'), 
     (93510010005, 'D', 'M', '1993-07-27', '25CCDH02'), 
     (93510010008, 'E', 'F', '1993-10-03', '25CCDH02'), 
     (93510010009, 'F', 'M', '1990-09-06', '25CCDH02'), 
     (93510010010, 'G', 'M', '1989-12-18', '25CCDH02'), 
     (99510170307, 'H', 'M', '1991-06-05', '25CCDH02'), 
     (99510180112, 'L', 'M', '1992-12-07', '25CCDH02'), 
     (99510180150, 'M', 'M', '1993-03-22', '25CCDH02'); 
+0

質問を追加しました。 – toonice

+0

ええ、それはとてもうまく動作します。どうもありがとうございました。 – Bobby

+1

ようこそ。回答があなたの問題を解決し、それが利用可能な回答の中で最も適切なものであれば、回答の上部にあるチェックマークをクリックして回答を受け入れることができます。これは回答者に15ポイントの報酬を与え、StackOverflowの答えられていない質問の質問から質問を削除します。 – toonice

関連する問題