select a.*,b.*,c.* from
( select 姓名 ,语文, dense_rank() over (order by 语文 desc) 名次 from tmp_1) a,
(select 姓名 ,数学, dense_rank() over ( order by 数学 desc) 名次 from tmp_1) b,
(select 姓名,总分 ,dense_rank() over (order by 总分 desc) 名次 from (select 姓名,语文+数学 总分 from tmp_1 t order by 语文+数学 desc ) t) c
where a.名次 = b.名次 and b.名次 = c.名次这个可以满足你的需要. 但是如果出现名次相同的时候,会有重复的数据出现.
记得给分呀.
( select 姓名 ,语文, dense_rank() over (order by 语文 desc) 名次 from tmp_1) a,
(select 姓名 ,数学, dense_rank() over ( order by 数学 desc) 名次 from tmp_1) b,
(select 姓名,总分 ,dense_rank() over (order by 总分 desc) 名次 from (select 姓名,语文+数学 总分 from tmp_1 t order by 语文+数学 desc ) t) c
where a.名次 = b.名次 and b.名次 = c.名次这个可以满足你的需要. 但是如果出现名次相同的时候,会有重复的数据出现.
记得给分呀.
select 姓名语文, 语文,row_number() over(order by 语文 desc) 名次语文,
姓名数学, 数学,row_number() over(order by 数学 desc) 名次数学,
......
姓名总分, (语文+数学+..) 总分,row_number() over(order by (语文+数学+..) desc) 名次总分
from 表1
order by 姓名结果大概是这样的
姓名语文 语文 名次语文 姓名数学 数学 名次数学 ... 姓名总分 总分 名次总分
-----------------------------------------------------------
李四 50 1 李四 25 3 ... 李四 75 2
王二 40 2 王二 30 2 ... 王二 70 3
张三 30 3 张三 60 1 ... 张三 90 1
名次相同的时候,不可以有重复的数据 :<duanzilin(寻):
这个结果我已经得到了,我需要得到按所有科目名次排序的结果 :<谢谢!
姓名,数学,row_number()over( order by 数学 desc)名次2,
姓名,score,row_number()over( order by score desc)名次3
from (
select 姓名,语文,数学,sum(语文+数学) over (partition by 姓名) score from 表 )t
这个没有同名次的,各个单科也有!!
name ch math
张三 30 60
李四 50 70
王二 40 20
王五 60 25
-------------------------------------------------
select ch.*,math.*,allscore.*
from
(select t.name,t.ch,row_number() over(order by t.ch desc) as sinnum
from temp t) ch,
(select t.name,t.math,row_number() over(order by t.math desc) as sinnum
from temp t) math,
(select t.name,(t.ch+t.math) as total ,row_number() over(order by (t.ch+t.math) desc) as sinnum
from temp t) allscore
where ch.sinnum=allscore.sinnum and math.sinnum=allscore.sinnum
order by allscore.sinnum
-------------------------------------------------
输出结果:
王五 60 1 李四 70 1 李四 120 1
李四 50 2 张三 60 2 张三 90 2
王二 40 3 王五 25 3 王五 85 3
张三 30 4 王二 20 4 王二 60 4
select t1.姓名,t1.语文,t1.r1,t2.姓名,t2.数学,t2.r2,t3.姓名,t3.总分,t3.r3 from
(select 姓名,语文,row_number() over( order by 语文 desc) r1 from table) t1,
(select 姓名,数学,row_number()over( order by 数学 desc) r2 from table) t2,
(select 姓名,(语文+数学) 总分,row_number()over( order by (语文+数学) desc) r3 from table) t3
where t1.r1 = t2.r2 and t1.r1 = t3.r3
数据:
李斯 82 45
张三 50 73
结果:
李斯 82 1 张三 73 1 李斯 127 1
张三 50 2 李斯 45 2 张三 123 2
SQL> drop table test;表被删掉已执行耗时0.328 秒SQL> create table test(name varchar2(20),yuwen number(3),shuxue number(3));表被创建已执行耗时0.062 秒SQL> insert into test values('张三',30,60);1 行 已插入已执行耗时0.015 秒SQL> insert into test values('李四',50,70);1 行 已插入已执行耗时0 秒SQL> insert into test values('王二',40,20);1 行 已插入已执行耗时0 秒SQL> commit;提交完成已执行耗时0 秒SQL> select a.name 姓名,yuwen 语文,x 名次,b.name 姓名, shuxue 数, y 名次,
2 c.name 姓名,zongfen 总分,z 名次 from
3 (select name,yuwen,rownum x from
4 (select name,yuwen from test order by yuwen desc) ) a,
5 (select name,shuxue,rownum y from
6 (select name, shuxue from test order by shuxue desc)) b,
7 (select name,zongfen ,rownum z from
8 (select name,yuwen+shuxue zongfen from test order by zongfen desc))c
9 where a.x=b.y
10 and a.x=c.z
11 order by a.x;姓名 语文 名次 姓名 数 名次 姓名 总分 名次
-------------------- ---- ---- -------------------- ---- ---- -------------------- ---- ----
李四 50 1 李四 70 1 李四 120 1
王二 40 2 张三 60 2 张三 90 2
张三 30 3 王二 20 3 王二 60 3已执行耗时0.062 秒