USER_ID      SCORE                  D_ID
--------------------- ---------- ---------------------
                    2       37.5                     1
                    2       28.5                     2
                    2       19.5                     3
                    3       13.2                     1
                    3       29.5                     2
                    3       35.5                     3
                    4       14.4                     1
                    4       13.5                     2     
                    4         29                     3
 
表 A 的数据如上,现在想要得到的结果如下:
              USER_ID      SCORE                  D_ID
--------------------- ---------- ---------------------
                    2       37.5                     1
                    3       35.5                     3
                    4         29                     3从一个用户的记录中取出分数最高的那一条记录,三个字段都必须查询出来。

解决方案 »

  1.   

    这个sql该怎么写啊?各位帮帮忙。
      

  2.   

    select user_id,score,d_id from
       select user_id,score,d_id,
              rank() over (partition by user_id order by score desc) rk)
    where rk=1;
    若同一user_id存在相同的最高分,即多条最高分记录,上面语句会取出所有记录。如果对同一user_id并列最高分只想取一条,则rank换成row_number
      

  3.   

    select user_id,score,d_id from 
       (select user_id,score,d_id, 
              rank() over (partition by user_id order by score desc) rk) 
    where rk=1; 
    前面少了左括号。
      

  4.   

    select t.* from tb t where SCORE = (select max(SCORE) from tb where USER_ID = t.USER_ID)select t.* from tb t where not exists (select 1 from tb where USER_ID = t.USER_ID and SCORE > t.SCORE)
      

  5.   

    用suiziguo 的方法问题解决了,谢谢.....