假设Oracle有下面的一张表:
- CREATE TABLE FOO(
-
- FOOID NUMBER(10),
- FIRSTCOL NUMBER(10),
- SECONDCOL NUMBER(10)
- );
为了方便测试,随机产生一些数据:
- DECLARE
- 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;
下面是生成的数据:
- FOOID FIRSTCOL SECONDCOL
- 1 1 19
- 2 134 172
- 3 25 176
- 4 99 56
- 5 41 17
- 6 65 55
- 7 73 0
要求: 需要按照FIRSTCOL与SECONDCOL中的最大值进行排序。第一个解决方案:
- SELECT *
- FROM FOO T
- ORDER BY (CASE WHEN T.FIRSTCOL>T.SECONDCOL THEN T.FIRSTCOL ELSE T.SECONDCOL END);
第二个解决方案:
- SELECT *
- FROM FOO T
- ORDER BY GREATEST(T.FIRSTCOL,T.SECONDCOL);
第二个方案明显要比第一种写法好很多,如果是在多列的情况下进行比较,因为总不可能写N多的CASE WHEN THEN ELSE END来进行多行的取最大值。看来Oracle总是比我们考虑的多一些,因此提供了GREATEST这个函数。PostgreSQL 堆分配器mmgr详解Perl 连接 Oracle 示例相关资讯 Oracle基础教程
- Oracle块编程返回结果集详解 (11/10/2013 10:45:58)
- Oracle基础教程之设置系统全局区 (08/22/2013 14:24:00)
- Oracle基础教程知识点总结 (06/18/2013 07:43:32)
| - Oracle基础教程之tkprof程序详解 (10/22/2013 11:49:50)
- Oracle基础教程之sqlplus汉字乱码 (07/18/2013 16:30:00)
- Oracle 管理之 Linux 网络基础 (02/16/2013 18:37:35)
|
本文评论 查看全部评论 (0)