有如下表:
编号 组 数量 组内排名
001 甲 100
002 甲 120   
003 乙 120
004 甲 101
005 乙 100
006 丙 100
007 甲 100
008 乙 105
想通过rank()函数直接将排名值更新到组内排名字段,原来用select到一个cursor,然后在遍历此cursor并一条一条update,感觉这样效率不是很高,有否更高效的语句直接可以更新进去
望指教,谢谢

解决方案 »

  1.   

    update table1 t set 组内排名=
      (select count(1)+1 from table1 where 组=t.组 and 数量<t.数量)
      

  2.   

    --如果要连续排名,将rank换成dens_rank
    UPDATE tab t
       SET 组内排名 =
           (SELECT rn
              FROM (SELECT tab.*, rank() over(PARTITION BY 组 ORDER BY 数量) rn FROM tab) a
             WHERE a.编号 = t.编号);