代码采用MySQL 8.0 命令行程序运行。
在命令行中先创建了test_db的数据库,数据库内表的建立是采用了下面这个链接中的数据。
https://zhuanlan.zhihu.com/p/130713078
问题1:查询"01"课程比"02"课程成绩高的学生的信息及课程分数
首先想到用子查询或者联结。
#这是第一种解法,用join,有比我写的更美观的。
#我这里存有一个疑问,就是两个分数比较的这个条件别人案例中大多放在联结表建立之后,不知道我这样放进联结表建立前是否影响效率,有待后续验证。
select c.sid, s.*, c.score1, c.score2 from
(select
sc1.sscore as score1,
sc2.sscore as score2,
sc1.sid
from
score sc1
join score sc2
on sc1.sid=sc2.sid
and sc1.cid= '01'
and sc2.cid ='02'
and sc1.sscore >sc2.sscore) c
join student s on c.sid = s.sid;
因为学习了些 开窗函数 想到可以将两个课程的分数放在同一行比较,这里采用的是开窗函数lead。(MySQL 8.0及以上版本支持)
lead(column