--------------------- ---------- ---------------------
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
从一个用户的记录中取出分数最高的那一条记录,三个字段都必须查询出来。
5 个解决方案
#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
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;
前面少了左括号。
(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 的方法问题解决了,谢谢.....
#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
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;
前面少了左括号。
(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 的方法问题解决了,谢谢.....