PostgreSQL如何创建统计学生课程加权考试成绩的视图
加权成绩视图创建语句
你可以直接使用以下SQL语句创建符合要求的total_marks视图:
CREATE VIEW total_marks (course_id, student_id, marks) AS SELECT ce.course_id, ce.student_id, -- 计算加权总分并格式化为两位小数的百分比形式 TO_CHAR(SUM(w.weightage * eg.mark), '990.99%') AS marks FROM course_enroll ce -- 关联考试成绩表获取学生单场考试得分 INNER JOIN exam_grade eg ON ce.student_id = eg.student_id -- 关联权重表获取对应考试的权重,双字段匹配避免数据错乱 INNER JOIN weight w ON eg.exam_id = w.exam_id AND ce.course_id = w.course_id -- 按课程、学生分组统计总加权分 GROUP BY ce.course_id, ce.student_id;
逻辑说明
- 从选课表
course_enroll作为主表,确保仅统计实际选修对应课程的学生记录 - 双字段关联权重表,避免同考试ID跨课程的权重匹配错误
- 用
TO_CHAR函数直接输出带百分号的格式化结果,和你给出的示例效果完全对齐
适配调整方案
如果你的业务有特殊需求,可以按需修改:
- 如需包含缺考学生:将
INNER JOIN exam_grade改为LEFT JOIN exam_grade,同时把计算逻辑改为SUM(w.weightage * COALESCE(eg.mark, 0)),缺考科目得分按0计算 - 如权重存储为百分值(比如30%权重存的是30而非0.3):将计算逻辑改为
SUM(w.weightage * eg.mark) / 100后再格式化
内容的提问来源于stack exchange,提问作者tommy sylas
相关产品推荐
相关产品推荐

