sql 差值_sql面试题重点(持续更新中。。。)

84260c09bf5d5f33b50abbb854661538.png

本文将收集较难或者解法奇妙的sql面试题作为复习题集,积累在于平时的点点滴滴,加油!

1.查询和"01"号的同学学习的课程完全相同的其他同学的学号和姓名

sc-成绩表 :sid,cid,score

teacher-教师表:tid,tname

student-学生表:sid,sname,sage,ssex

course-课程表:cid,cname,tid

SELECT DISTINCT sc.sid FROM sc 
WHERE sid not in (
SELECT sid FROM sc
WHERE cid not in 
(SELECT cid FROM sc WHERE sid = 01))
GROUP BY sid 
HAVING COUNT(DISTINCT cid)=(SELECT count(cid) FROM sc WHERE sid =01)
and sid !=01

本题在于用not in找出和01同学学的课程不同的同学学号,再用not in除去该学生,然后利用groupby having 去重计数找到学课程完全一样的的学生,最后排除01学生。

2.查询所有课程的成绩第2名到第3名的学生信息及该课程成绩

SELECT * FROM 
(SELECT *,
row_number() over(PARTITION by cid ORDER BY score desc ) num 
FROM sc ) a
WHERE num in (2,3)

子查询中用row_number() over()分组排序,再利用where in 定位位置找到分组中第二与第三行。

3.查询每门功课成绩最好的前两名

方法一:窗口函数

SELECT *FROM 
(SELECT *,row_number() over(PARTITION by cid ORDER BY score desc) num_score 
FROM sc ) a 
WHERE a.num_score<=2

row_number 和 子查询

方法二:子查询

SELECT * FROM sc c
WHERE 2>(SELECT COUNT(sid) FROM sc WHERE c.cid=cid AND score>c.score)
ORDER BY c.cid,c.score desc

4.查询下周过生日的学生

SELECT sid,sname,sage
FROM student
where WEEKOFYEAR(sage)=WEEKOFYEAR(date_add(CURDATE(),INTERVAL 1 week))

日期函数weekofyear 周索引,curdate当前年月日,date_add日期偏移

----------------------------------------------------------------------------------------

5.table1(id:自增id,money:费用)问题:按id顺序累加money,取出累计值与1000相差最小差值的id。

select id from (
select id, abs(sum(money) over(order by id)-1000) m from table1) a
order by m
limit 1

6.

d45b1326a1ec1816d1b3e9e7da52e768.png
select id from weather a,weather b 
where a.temperature<b.temperature
and datediff(a.recorddate,b.recorddate)=1

考察datediff函数、自连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值