update test a
set
a.ord=(select rn from (select rownum rn,name from test b order by total,chinese))
where a.name=b.name

解决方案 »

  1.   

    你的ord列如果只是为了显示的话,好像没有什么必要把1:
    SELECT a.name,a.chinese,a.total,ROWNUM ord
    FROM (SELECT * FROM test ORDER BY total DESC,chinese DESC) a2:
    SELECT a.name,a.chinese,a.total,b.ord
    FROM test a,
         (SELECT total ,ROWNUM ord FROM (SELECT DISTINCT total FROM test ORDER BY total DESC)) b
    WHERE a.total = b.total   
    ORDER BY total DESC,chinese DESC
      

  2.   

    dense_rank()  over()  这个816以上版本支持的分析函数就是为你的需求定做的 :)
      

  3.   

    dense_rank()  over()这个816以上版本的函数是为你这个需求定做的