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从一个用户的记录中取出分数最高的那一条记录,三个字段都必须查询出来。
--------------------- ---------- ---------------------
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从一个用户的记录中取出分数最高的那一条记录,三个字段都必须查询出来。
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
(select user_id,score,d_id,
rank() over (partition by user_id order by score desc) rk)
where rk=1;
前面少了左括号。