oracle中有greatest和least两个函数用来得到多列数据中的最大值和最小值.
可是好像没办法得到多列数据中的次大值、第三大值...这些数据
我目前的做法是,把需要对比的多列进行行转列,
接着row_number()OVER(PARTITION BY col1 ORDER BY col2 desc)
这样来获得可是效率上低了很多!
敢问各位大大,是否小弟孤陋寡闻,Oracle中还有其他函数来获取这些值?
又或者有更好的思路以获取这些值?
不胜感激

解决方案 »

  1.   

    列数少可以greatest(
             decode(a,greatest(a,b,c),least(a,b,c),a),
             decode(b,greatest(a,b,c),least(a,b,c),b),
             decode(c,greatest(a,b,c),least(a,b,c),c)
            ) second_
      

  2.   

    谢谢,这个方法可行
    不过,如果想要的结果是可以并列最大的话不行.
    比如
    1、2、2、3、3、4、4、5
    最大、次大、第三大...想要这样的结果
    5、4、4、3、3、2、2、1
    其实,我想实现的是Excel的Large函数
      

  3.   

    谢谢,我用row_number排序和rank是大同小异的
    不过前提这两个都需要先把列转行..