SQL语句如何查询成绩的前三名带成绩重复的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句如何查询成绩的前三名带成绩重复的相关的知识,希望对你有一定的参考价值。

例如 有一个表:
学号 姓名 成绩
001 1234 90
002 1235 85
003 1236 85
004 1237 83
005 1238 83
006 1239 78

如果我要查出前三名是谁 并且连重复的也要查出来改怎么查 我想要的结果是
001 1234 90
002 1235 85
003 1236 85
004 1237 83
005 1238 83
成绩是前3的5个人

参考技术A select * from table where 成绩 in (select top 3 distinct 成绩 from table order by 成绩 desc) order by 成绩 desc

下面这个效率要高点
select * from table where 成绩 >= (select min(成绩) from(select top 3 distinct 成绩 from table)) order by 成绩 desc本回答被提问者采纳
参考技术B select a.学号,a.姓名,a.成绩 from 表名 a,
(select * from (select distinct 成绩 from 表名 order by 成绩 desc) where rownum<=3) b
where a.成绩=b.成绩;
参考技术C select * from biao where 成绩 in (select top 3 成绩 from biao group by 成绩 order by 成绩 desc) desc

C#统计出各班的每个学生的总成绩,并打印出每班的前三名成绩

不求代码,只求算法,我现在只能统计出每个班所有学生的总成绩,但是不知道怎么只打印出前三名,假设每个班有10个人
数据是从txt文档里面一行行读取的,比如这样:
1011234567广岛中学11100001赵一100100100100099
最后一串数字以每3个为一组,分别代表了5科成绩

你学生和学生的总成绩,用Dictionary<学号,成绩>,应该是Dictionary<string,int>来保存,
new 一个变量,Dictionary<string,int> totalScoreDic=new Dictionary<string,int>();
然后循环遍历所有学生,每次循环中又循环该生的所有成绩,并totalScoreDic[学号]+=该生成绩,循环完就得到每个学生总成绩了。
至于前三名只要对totalScoreDic遍历3次就好了,每次取出最大的那个,取出后将该个从totalScoreDic删掉。
参考技术A 1.不知道你文件格式,如果是cvs文件,直接用ado.net 读成datatable,剩下的东西估计你自己一会做
2.如果文件不是cvs,用stream流,readline一行一行读,同时把最后组每3位一截,截成5科的单独成绩
3.算法部分,如果要求只打印出每班前三名,则不必做全排序。按班级Dictionary做堆排序就ok了

堆排资料:http://baike.baidu.com/view/157305.htm
参考技术B 你把所有人成绩放到数组里,然后直接用Array.Sort排序(默认是升序排序),然后从数组最后一个元素起逆向输出三个就行了,那就是前三名。(当然象这种读取文件的话,Array可能不太适合,可以考虑用Dictionary或者两个List,这两个排序资料也不少了,自己查查看) 参考技术C 从txt文件中读出数据时,就应该得到他们的总成绩,然后再保存到Array中,然后用他内部了的排序方法得到最后 的结果哦! 参考技术D select top 3 * from (你的统计查询) ; 第5个回答  2012-05-17 可以放在数组里,然后通过冒泡排序进行排序,然后取数组下标的前三位。。

以上是关于SQL语句如何查询成绩的前三名带成绩重复的的主要内容,如果未能解决你的问题,请参考以下文章

用sql语句,查询每个班级成绩排名前三名的学生姓名

用sql语句,查询每个班级成绩排名前三名的学生姓名

sql查出每个科目成绩前三名

mysql版 查询各科成绩前三名的记录:(不考虑成绩并列情况)

mysql 查询每个班的前十名的成绩

SQL语句练习查询平均成绩最高的前3名同学