id name grade
1 小明 90
2 小刚 88
3 小红 100
4 小明 100
5 小刚 90
6 小红 80
我要查出这个效果: 3 小红 100
4 小明 100
5 小刚 90
-----------------------------
1 小明 90
2 小刚 88
6 小红 80
------------------------------
也就是说,每个人的分数最高的排一起,第2高的排一起,依次类推
order by grade? 如果小明的分数排的2的比其他人第一的高就不对了
------解决方案--------------------
这需求确实蛋疼
是不是还有个"科目"字段啊
小明两个grade什么意思
------解决方案--------------------
根据人名进行分级,再排序!
------解决方案--------------------
把每个人独自排序 然后选择第几个位置的数据不就可以了吗
用数组吧
------解决方案--------------------
存储过程
------解决方案--------------------
不知道楼主是要用sql 语句完成所有排名并打印出来,还是可以每个一条件执行一句,比如我现在想查第一的可以用:
- SQL code
select * from test.score where (grade,name) in (select max(grade) as grade,name from test.score group by name)
------解决方案--------------------
不好意思,上面的语句是在自己的机子上测试的。改一下
- SQL code
select * from user where (grade,name) in (select max(grade) as grade,name from user group by name)
------解决方案--------------------
如果是用java代码的话,假设已经有user 实体,可以使用如下代码:
- Java code
Comparator<User> comparator = new Comparator<User>(){ public int compare(User u1,User u2){ return u2.getGrade() - u1.getGrade();//排倒序 }};Map<String,List<User>> users = new HashMap<String,List<User>>();//key 为用户名,list 是每个相同用户名的n个实体int index = 1;int length = users.values().iterator().next().size();for(;index<=length;index++){ System.out.println("-------------第"+index+"高分----------"); for(String key;users.keySet()){ User user = users.get(key).get(index); System.out.println(user.getId()+"\t"+user.getName()+"\t"+user.getGrade()); }}
------解决方案--------------------
挺有意思的,需求明白了,你的要求是什么?用纯sql 还是 纯java?还是什么
------解决方案--------------------
order by grade desc
------解决方案--------------------
2个排序不就可以了
------解决方案--------------------
select *,(
select count(*) from Test001
where Test001.name=x.name and
Test001.id<>x.id and
Test001.grade>=x.grade) as row
from (select id,name,grade from Test001) as x
order by row;
------解决方案--------------------
Test001是表名,若是sqlserver2005/2008 或oracle 9之后都有 rownumber 函数就好办多了,
要是想从低到高可是把 Test001.grade>=x.grade 变为 Test001.grade《=x.grade
------解决方案--------------------
Test001是表名,若是sqlserver2005/2008 或oracle 9之后都有 rownumber 函数就好办多了,
要是想从低到高可是把 Test001.grade>=x.grade 变为 Test001.grade《=x.grade