3,491
社区成员
发帖
与我相关
我的任务
分享
1 with tb as
2 (
3 select '张三' name, 55 score from dual union all
4 select '李四' name, 65 score from dual union all
5 select '王五' name, 65 score from dual union all
6 select '赵六' name, 82 score from dual union all
7 select '王麻子' name, 70 score from dual
8 )
9 select * from (select name,score,rank() over(order by score) ranking from tb)
10* order by ranking desc
SQL> /
NAME SCORE RANKING
------ ---------- ----------
赵六 82 5
王麻子 70 4
李四 65 2
王五 65 2
张三 55 1
select name,score,rank() over(order by score) ranking from test order by score desc
select * ,row_number()over(partition by name order by score desc) ranking
from test;
with tmp as
(
select '张三' name, 55 score from dual union all
select '李四' name, 65 score from dual union all
select '王五' name, 65 score from dual union all
select '赵六' name, 82 score from dual union all
select '王麻子' name, 70 score from dual
)
select name, score, rank() over (order by score desc ) ranking
from tmp;
NAME SCORE RANKING
------------- ---------- ----------
赵六 82 1
王麻子 70 2
李四 65 3
王五 65 3
张三 55 5
drop table test;
create table test(name varchar(10),score int);
insert into test select '张三', 55 from dual;
insert into test select '李四', 65 from dual;
insert into test select '王五', 65 from dual;
insert into test select '赵六', 82 from dual;
insert into test select '王麻子',70 from dual;
select name,score,(select count(score) from test where score<=t.score) as ranking
from test t
order by ranking desc
NAME SCORE RANKING
赵六 82 5
王麻子 70 4
李四 65 3
王五 65 3
张三 55 1