sql 面试题记录
一张学生表,字段 :学生ID,学生课程,学生成绩
问:每门课程前三名的学生信息?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
create table student ( id varchar(50), --编号 class varchar(50),--课程 soure int --成绩 ) go
方法一 :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
--查询每门课程成绩最高者的前两名(结果正确) 方法一 SELECT * FROM student A WHERE id IN ( SELECT TOP 2 id FROM student B WHERE B.class = A.class ORDER BY B.score DESC ) --到这为止查询结果出现 ORDER BY A.class DESC
方法二:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
--查询每门课程成绩最高者的前两名(结果正确) 方法二 SELECT * FROM student A WHERE (SELECT COUNT(*) FROM student B WHERE B.class = A.class AND B.score >= A.score) <= 2 --(注释:2表示前两名) ORDER BY A.class DESC
表数据方面可以点击这里 https://www.cnblogs.com/newrohlzy/p/10036834.html
注:我是进行了一次测试,下面对该问题的详解地址https://blog.csdn.net/wxnjob/article/details/43231491