有一个表table,字段qual,cata,price,内容如下:
cata qual price
1     1    100
1     1    200
1     1    300
2     2    100
2     2    200
2     2    300
2     2    400
我想得到这样的结果
cata qual price num
1     1    100   1
1     1    200   2
1     1    300   3
2     2    100   1
2     2    200   2
2     2    300   3
2     2    400   4
也就是说,按照cata,qual分组后,在每个分组里,按照price排序,得到price在这个分组里的排名num。请教各位在oracle 里的实现

解决方案 »

  1.   

    如果在sql中是不是不能实现?我是想在sql里实现
      

  2.   

    SELECT ual,cata,price, DENSE_RANK()
            OVER (PARTITION BY ual,cata ORDER BY price) as drank
      FROM table看看行不?
      

  3.   

    select *,row_number() over(partition by cata order by price) num 
    from TAble
      

  4.   

    经过测试,jiazheng(飞天) 的办法肯定可以。但tianyacao007的那个sql当我在不同的条件下,却出现不同结果。有点不清楚原因。谁能给解释一下DENSE_RANK()OVER (PARTITION BY qual,cata ORDER BY price)和row_number() over(partition by cata,qual order by price)之间的区别?
      

  5.   

    Dense_Rank()為評級函數,如果兩個值相等就會出num相同的情況
      

  6.   

    dense_rank()over()可能出现排名重复,原因:值相同,ex: 1,2,2,3,4...
    row_number()over()绝对不出现排名重复, ex:1,2,3,4...