一、根据班级分类对不同的学生的各科成绩与总成绩进行校验。
首先数据表信息如下:
这里有三个学生,语文,数学,英语的成绩都是100,所以他们的总成绩是300,这里我们就是要根据班级分组然后验学科总成绩与各学科成绩累加是否相等。
首先按照学号与班级号
进行分组,然后sum各科分数与去重的总分数求和
SELECT
s_no,
course_no,
sum( score ) score,
sum( DISTINCT total_score ) total_score
FROM
`stu`
GROUP BY
s_no,
course_no
然后得到
根据观察得到班级号还要重复,然后再进行分组求和
SELECT
sum( score ) score,
sum( total_score ) total_score,
course_no
FROM
( SELECT s_no, course_no, sum( score ) score, sum( DISTINCT total_score ) total_score FROM `stu` GROUP BY s_no, course_no ) t
GROUP BY
course_no
就会得到:
各科分数(score)与总分数(total_score)都是一样的说明是正确的。
现在修改王五的分数。
再执行
2班的各科分数(score)与总分数(total_score)不一样,说明2班的成绩有问题。
二、按专业成绩进行校验
如图所示,要校验专业总成绩和班级总成绩。
数据库表数据
首先对专业总成绩根据班级和学号,专业进行分组,然后去重总成绩,而班级总成绩按照班级号和专业分组然后去重即可。
求专业总成绩。
SELECT sum( DISTINCT major_score ) major_score, major FROM stu GROUP BY major
然后分组求班级总成绩。
SELECT
sum( class_score ) class_score,
major
FROM
( SELECT sum( DISTINCT class_score ) class_score, major, class_no FROM stu GROUP BY major, class_no ) tmp
GROUP BY
major
然后再进行连表。
SELECT
t1.major_score,
t2.class_score,
t1.major
FROM
( SELECT sum( DISTINCT major_score ) major_score, major FROM stu GROUP BY major ) t1,
(
SELECT
sum( class_score ) class_score,
major
FROM
( SELECT sum( DISTINCT class_score ) class_score, major, class_no FROM stu GROUP BY major, class_no ) tmp
GROUP BY
major
) t2
WHERE
t1.major = t2.major
专业分数和班级分数和一致,说明数据没问题。