一张表内有一个字段a,记录了从0-100的整数,现要根据a来排名次,然后把名次写在字段b里
如:
id a b
1 2 0
2 5 0
3 5 0
4 6 0
5 3 0
排名次的结果应该是
b(名次) id a
1 4 6
2 2 5
3 3 5
4 5 3
5 1 2
这样的SQL语句怎么写最好呢?
如:
id a b
1 2 0
2 5 0
3 5 0
4 6 0
5 3 0
排名次的结果应该是
b(名次) id a
1 4 6
2 2 5
3 3 5
4 5 3
5 1 2
这样的SQL语句怎么写最好呢?
解决方案 »
- 关于oracle 存储过程的问题 跪求各位大神解决
- 问一个时间查询的问题...
- 史上最难的,不知道怎么组合的存储过程,求解答,求解救!!!!!!!
- 再次散分,顺便个大家拜个早年!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 求一SQL语句 请各位高手指点
- 问一个to_date的问题
- 关于oracle里的一个会话,怎么也中断不了,总是提示在执行jrew.exe程序,
- 用注释来大幅提升查询速度“/*+ STAR */” ,谁能给个解释呢?
- 现在只知道数据库名,其它的什么都不知道请问如何用备份文件(databak.bmp)还原数据库?帮顶也给分!!!
- ORA-28030 Server encountered problems accessing LDAP directory service如何解决
- ORACLE 高手请进!在线等待!!!
- 请教排序的写法
---------- ---------- ----------
1 2 0
2 5 0
3 5 0
4 6 0
5 3 0
SQL> update ts1 t
2 set t.b = (select num from
3 (select row_number()over(order by a asc) as num, rowid as rid from ts1
)
4 where t.rowid = rid);已更新5行。
SQL> select *from ts1 ; ID A B
---------- ---------- ----------
1 2 1
2 5 3
3 5 4
4 6 5
5 3 2
SQL> update ts1 t
2 set t.b = (select num from
3 (select row_number()over(order by a desc) as num, rowid as rid from ts1
)
4 where t.rowid = rid);已更新5行。
SQL> select b, id ,a from ts1 order by 1 ; B ID A
---------- ---------- ----------
1 4 6
2 2 5
3 3 5
4 5 3
5 1 2
num --- 取得排名, row_number()over(...)分析函数的用法可以在网上搜索
rowid -- 数据行的实际物理地址update ts1 t
set t.b =
(select num from
(select row_number()over(order by a desc) as num, rowid as rid from ts1 )
where t.rowid = rid);首先确定数据的排名和物理地址,然后根据物理地址更新排名