MySql 查询排名前10(包含并列)Sql

今天一个测试的朋友去面试,考察了她数据库查询的一些语法问题,但是一些细节她没有考虑进去被刷下了。果然行业标准提高了啊。

贴一下笔试题目。

–1.学生表
Student(SId,Sname,Sage,Ssex)
–SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

–2.课程表
Course(CId,Cname,TId)
–CId 课程编号,Cname 课程名称

–3.成绩表
SC(SId,CId,score)
–SId 学生编号,CId 课程编号,score 分数

完成如下查询:
① 查询即选了课程编号A又选了课程编号B的学生信息
② 查询所有学生的选课数量和总成绩
③ 查询课程编号A成绩前十的学生信息和对应的分数
④ 查询选课热度前三的课程信息
⑤ 查询每个学生的选课信息

这题目大概大家都不陌生,但是说到查询前多少名时很多人第一反应就是用 top,并没有考虑不同数据库是不一样的而且并列排名也往往会忽略。
就此 ,我贴一下我的答案,写的不好,希望多交流。

  1. 第1题
select * from student where sid in (
SELECT sid from sc WHERE cid in (A,B)
)

  1. 第2题
Select sum(score),count(cid),s.sid ,sname from student s left join sc on s.sid = sc.sid   group by s.sid ,sname
  1. 第3题
-- Orcal serverSql 用 top 10
-- Mysql
SELECT * from (
SELECT  sid,cid,  Score,
@rank:= if(@pre=score, @Rank+0, @Rank+1) as Rank, 
@pre:= score 
FROM sc ,
 (SELECT @rank:=0, @pre:= NULL) r
 where cid = 2
ORDER BY score desc ) a LEFT JOIN student s on a.sid = s.sid WHERE rank <= 10;

  1. 第4题

-- Orcal server sql 用 top 

-- Mysql

select * from (
SELECT cid, count(cid) c_cid  from sc  GROUP BY cid  
) a LEFT JOIN course c on a.cid = c.cid ORDER BY  c_cid desc LIMIT 10

  1. 第5题
SELECT * from sc , course , student WHERE sc.sid= student.sid and sc.Cid=course.cid ORDER BY sc.sid 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值