Mysql 降序查询学生成绩列表(含平均分 总分)经验总结

学生表

在这里插入图片描述

成绩表

在这里插入图片描述

实现代码:

SELECT
	a1.student_id '学号',
	d.student_name '姓名',
	a1.score 'Java基础',
	a2.score 'Java高级',
	a3.score '前端',
	b.sumscore '总成绩',
	c.avgscore '平均分' 
FROM
	( SELECT ss.student_id, ss.score FROM student_socre ss WHERE ss.course_id = 1 ) a1
	LEFT JOIN ( SELECT ss.student_id, ss.score FROM student_socre ss WHERE ss.course_id = 2 ) a2 ON a1.student_id = a2.student_id
	LEFT JOIN ( SELECT ss.student_id, ss.score FROM student_socre ss WHERE ss.course_id = 3 ) a3 ON a3.student_id = a2.student_id
	LEFT JOIN ( SELECT ss.student_id, sum( ss.score ) sumscore FROM student_socre ss GROUP BY ss.student_id ) b ON a3.student_id = b.student_id
	LEFT JOIN ( SELECT ss.student_id,CAST(AVG( score ) AS DECIMAL ( 10, 2 )) avgscore FROM student_socre ss 
	GROUP BY ss.student_id) c ON c.student_id = b.student_id
	LEFT JOIN ( SELECT s.student_id, s.student_name FROM student s GROUP BY s.student_id ) d ON c.student_id = d.student_id 
ORDER BY b.sumscore DESC

效果:

在这里插入图片描述
只显示个别班级的学生(例子显示一班的学生)

实现代码

SELECT
	a1.student_id '学号',
	d.student_name '姓名',
	a1.score 'Java基础',
	a2.score 'Java高级',
	a3.score '前端',
	b.sumscore '总成绩',
	c.avgscore '平均分'	
FROM
( SELECT s.student_id, s.student_name FROM student s WHERE class_id=1 GROUP BY s.student_id ) d 
	LEFT JOIN ( SELECT ss.student_id, ss.score FROM student_socre ss WHERE ss.course_id = 1 ) a1 ON a1.student_id = d.student_id
	LEFT JOIN ( SELECT ss.student_id, ss.score FROM student_socre ss WHERE ss.course_id = 2 ) a2 ON a1.student_id = a2.student_id
	LEFT JOIN ( SELECT ss.student_id, ss.score FROM student_socre ss WHERE ss.course_id = 3 ) a3 ON a3.student_id = a2.student_id
	LEFT JOIN ( SELECT ss.student_id, sum( ss.score ) sumscore FROM student_socre ss GROUP BY ss.student_id ) b ON a3.student_id = b.student_id
	LEFT JOIN ( SELECT ss.student_id,CAST(AVG( score ) AS DECIMAL ( 10, 2 )) avgscore FROM student_socre ss 
	GROUP BY ss.student_id) c ON c.student_id = b.student_id
ORDER BY b.sumscore DESC

效果:

在这里插入图片描述

若不排序 简化版

实现代码

SELECT
	s.student_id AS 学号,
	s.student_name AS 姓名,
	MAX( CASE WHEN ss.course_id = 1 THEN score ELSE 0 END ) AS Java基础,
	MAX( CASE WHEN ss.course_id = 2 THEN score ELSE 0 END ) AS Java高级,
	MAX( CASE WHEN ss.course_id = 3 THEN score ELSE 0 END ) AS 前端,
	CAST(
	AVG( score ) AS DECIMAL ( 10, 2 )) AS 平均分,
	SUM( score ) AS 总分 
FROM student s
	LEFT JOIN student_socre ss ON s.student_id = ss.student_id 
GROUP BY s.student_id

效果:

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值