从表的不同列中选择最大值
例如,表格
A B C
-------
1 2 3
4 5 6
7 8 9
结果就像
Max
9
答案 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)
这里是一个选项,它使用GREATEST
和LEAST
聚合中的MAX
和MIN
函数:
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