星空网 > 软件开发 > 数据库

一个学生分数表,用sql语句查询出各班级的前三名

昨天去一家公司面试,被这道题难住了,哎,又失去一次好的机会。

回来 之后就再想这个问题

 

表结构及数据如下:

一个学生分数表,用sql语句查询出各班级的前三名

实现的sql语句:

刚开始的实现是

select * from student a where a.id in (SELECT b.id from student b where b.classId=a.classId ORDER BY grade DESC LIMIT 0,3) ;
看起来没毛病,其实一大堆,第一 对于mysql来说,in(里面不能使用limit) 有语法错误,第二 前三名不一定就只有3位哦

尝试改:语句理解:也就是只要班级里有三个学生的分数超过这个学生,那么这个学生就不是前三名。

select * from student b
where
not EXISTS(select * from student c where c.classId=b.classId and b.grade < c.grade GROUP BY c.classId HAVING COUNT(*)>3 )

 

结果显示

 

一个学生分数表,用sql语句查询出各班级的前三名

 

查询次数统计

not exists 其实是嵌套循环。如果student有1000条数据,则会查询1+1000次,如果还不理解,就用java代码协助下

List<Student> students =studentService.queryAll();//查询出全部

for(int i=0;i<students.length();i++){

   //过滤前三名

   //查询是不是班级前三名

}

所以总共查询1+n次,n表示student表的总条数

 

感觉不靠谱,如果有10W条数据,就查询了10W次,真是受不了的,再想想,有好方法的朋友快来围观,十分感激!

 




原标题:一个学生分数表,用sql语句查询出各班级的前三名

关键词:sql

sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

如何通过折扣网站Togetho推广产品!:https://www.ikjzd.com/articles/119947
12款爆品预测:家居、服饰、宠物……总有一个能成爆款!:https://www.ikjzd.com/articles/119948
亚马逊平台上传单个产品全教程【图解】:https://www.ikjzd.com/articles/11995
号外:“2018亚马逊全球开店卖家峰会”即将召开,众多优质卖家将齐聚宁波!:https://www.ikjzd.com/articles/11996
海关总署:关于公布《海关认证企业标准》的公告!:https://www.ikjzd.com/articles/11997
口罩出口海关法检新规下,疯狂市场一夜崩盘?(深度访谈):https://www.ikjzd.com/articles/119976
在英国有分公司的中国公司:https://www.xlkjsw.com/tag/30029.html
英国成立:https://www.xlkjsw.com/tag/30031.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流