《SQL面试50题》刷题笔记 day1( 知识点:联结 开窗函数lead)

代码采用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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值