在整个Oracle表中选择一个最大值或最小值

时间:2018-10-13 11:20:54

标签: sql oracle oracle10g

从表的不同列中选择最大值

例如,表格

 A  B  C
 -------
 1  2  3
 4  5  6
 7  8  9

结果就像

Max
9

6 个答案:

答案 0 :(得分:3)

假设值永远不会为NULL,我会简单地这样做:

select max(greatest(a, b, c))
from t;

您也可以这样表达:

select greatest(max(a), max(b), max(c))
from t;

此版本对NULL值更具弹性。除非一列的 all 值为NULL,否则它将与NULL一起使用。

答案 1 :(得分:1)

那又怎么样:

select greatest(max(a), max(b), max(c))
  from your_table;

或者:

select max(x)
  from (select max(a) as x from your_table union all
        select max(b) from your_table union all
        select max(c) from your_table union all
  )

答案 2 :(得分:1)

这里是一个选项,它使用GREATESTLEAST聚合中的MAXMIN函数:

SQL> with test (a, b, c) as
  2    (select 1, 2, 3 from dual union all
  3     select 4, 5, 6 from dual union all
  4     select 7, 8, 9 from dual
  5    )
  6  select max(greatest(a, b, c)) max_result,
  7         min(least(a, b, c)) min_result
  8  from test;

MAX_RESULT MIN_RESULT
---------- ----------
         9          1

SQL>

答案 3 :(得分:0)

您可以尝试

 select max(value) as Max from (
 select max(A) as value from example
 union 
 select max(B) as value from example 
 union
 select max(C) as value from example ) as tab;

答案 4 :(得分:0)

它还将处理列中存在的NULL值。

WITH tempData (a, b, c) AS (SELECT NULL, 2, 3 FROM DUAL UNION ALL SELECT 4, 5, 6 FROM DUAL
UNION ALL SELECT 7, 8, NULL FROM DUAL)
SELECT GREATEST(MAX(a), MAX(b), MAX(c)) AS maxval, LEAST(MIN(a), MIN(b), MIN(c)) AS minval FROM tempData;

答案 5 :(得分:0)

怎么样?

select greatest(NVL(c1, 0),NVL(c2, 0),NVL(c3, 0), NVL(c4, 0)) from T