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的比其他人第一的高就不对了

解决方案 »

  1.   

    传送中的精通,精通的大牛们在哪里去了160434650 java 技术交流群
      

  2.   

     这需求确实蛋疼
     是不是还有个"科目"字段啊
     小明两个grade什么意思
      

  3.   

    ......可能是我没说清楚。现在重新说一下 user表
    id name grade
     1 小明 90
     2 小刚 88
     3 小红 100
     4 小明 100
     5 小刚 90
     6 小红 80
     
    所有学生的考试成绩都录到user表里,里面装了N次的考试成绩(也就是hllfl
    说的为什么小明有2个grade) 我要的结果是查询小明,小红,小刚所有考试中最高分,第2高,第3高....直到第N高:我要查出这个效果:
      最高分:
      3 小红 100
      4 小明 100
      5 小刚 90
    --第2高分------------------------------------------------------------
      1 小明 90  
      2 小刚 88
      6 小红 80
      

  4.   

    不知道楼主是要用sql 语句完成所有排名并打印出来,还是可以每个一条件执行一句,比如我现在想查第一的可以用:select * from test.score where (grade,name) in (select max(grade) as grade,name from test.score group by name)
      

  5.   

    不好意思,上面的语句是在自己的机子上测试的。改一下select * from user where (grade,name) in (select max(grade) as grade,name from user group by name) 
      

  6.   

    如果是用java代码的话,假设已经有user 实体,可以使用如下代码: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());
        }}有可能会有语法错误,调试时适当修改即可。
      

  7.   

    挺有意思的,需求明白了,你的要求是什么?用纯sql 还是 纯java?还是什么
      

  8.   

    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;
      

  9.   

    Test001是表名,若是sqlserver2005/2008 或oracle 9之后都有 rownumber 函数就好办多了,
    要是想从低到高可是把 Test001.grade>=x.grade 变为 Test001.grade《=x.grade
      

  10.   

    Test001是表名,若是sqlserver2005/2008 或oracle 9之后都有 rownumber 函数就好办多了,
    要是想从低到高可是把 Test001.grade>=x.grade 变为 Test001.grade《=x.grade