热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

ORACLE按照两列中最大值进行排序

ORACLE按照两列中最大值进行排序假设有下面的一张表:[sql]CREATETABLEFOO(www.2cto.comFOOIDNUMBER(10),FIRSTCOLNUMBER(10),SECONDCOLNUMBER(10));为了方便测试...SyntaxHighlight

ORACLE按照两列中最大值进行排序
 
 假设有下面的一张表:
[sql] 
CREATE TABLE FOO(  
    www.2cto.com  
    FOOID   NUMBER(10),  
    FIRSTCOL    NUMBER(10),  
    SECONDCOL NUMBER(10)  
);  
    为了方便测试,随机产生一些数据:
[sql] 
DECLARE  www.2cto.com  
    N_FOOID FOO.FOOID%TYPE;  
    N_FIRSTCOL FOO.FIRSTCOL%TYPE;  
    N_SECOND FOO.SECONDCOL%TYPE;  
BEGIN  
    N_FOOID :=0;  
    DELETE FROM FOO;  
    FOR I IN 0 .. 200 LOOP  
        N_FOOID := N_FOOID+1;  
        SELECT TRUNC(DBMS_RANDOM.VALUE(0, 200)),  
             TRUNC(DBMS_RANDOM.VALUE(0, 200))  
            INTO N_FIRSTCOL,N_SECOND  
        FROM DUAL;  
        INSERT INTO FOO(FOOID,FIRSTCOL,SECONDCOL)  
        VALUES(N_FOOID,N_FIRSTCOL,N_SECOND);  
    END LOOP;  
END;  
 
    下面是生成的数据:
[sql] 
FOOID   FIRSTCOL  SECONDCOL  
1 1    19  
2 134  172  
3 25   176  
4 99   56  
5 41   17  
6 65   55  
7 73   0  
  www.2cto.com  
要求: 需要按照FIRSTCOL与SECONDCOL中的最大值进行排序。
 
第一个解决方案:
[sql] 
SELECT *   
   FROM FOO T  
ORDER BY (CASE WHEN T.FIRSTCOL>T.SECONDCOL THEN T.FIRSTCOL ELSE T.SECONDCOL END);  
 
第二个解决方案:
[sql] 
SELECT *  
   FROM FOO T  
ORDER BY GREATEST(T.FIRSTCOL,T.SECONDCOL);  
第二个方案明显要比第一种写法好很多,如果是在多列的情况下进行比较,因为总不可能写N多的CASE WHEN THEN ELSE END来进行多行的取最大值。看来Oracle总是比我们考虑的多一些,因此提供了GREATEST这个函数。

推荐阅读
author-avatar
手机用户2502906401
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有