请尝试以下...
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_table一个LEFT JOIN和Grade_table。此练习不需要Courses_table。
然后,它将每个学生得到的数据集分组,并使用AVG()函数计算每个学生的平均数。如果学生没有Grade_table条目,则AVG()将返回NULL值。如果AVG()返回非NULL值,则返回COALESCE();如果返回NULL值,则返回N/A。
如果您有任何问题或意见,请随时发布相应评论。
附录
我测试了我的发言反对使用下面的脚本创建数据...
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');