甲骨文:从同一行的不同列中选择最大值
-
05-10-2019 - |
题
整个问题是在标题几乎。对于表的每一行我想选择最大列的子集的。
例如,从该表
name m1 m2 m3 m4
A 1 2 3 4
B 6 3 4 5
C 1 5 2 1
其结果将是
name max
A 4
B 6
C 5
查询必须是兼容的Oracle 8i中。
解决方案
鉴于这种测试数据...
SQL> select *
2 from your_table
3 /
NAME M1 M2 M3 M4
---- ---------- ---------- ---------- ----------
A 1 2 3 4
B 6 3 4 5
C 1 5 2 1
SQL>
...的直接GREATEST()调用将得到所需的结果是:
SQL> select name
2 , greatest(m1,m2,m3,m4)
3 from your_table
4 /
NAME GREATEST(M1,M2,M3,M4)
---- ---------------------
A 4
B 6
C 5
SQL>
其他提示
使用GREATEST
还要处理可能NULL
的
SELECT name, GREATEST(NVL(m1,0), NVL(m2,0), NVL(m3,0), NVL(m4,0)) AS "Max"
FROM yourtable
输入:
name m1 m2 m3 m4
A 1 2 3 4
B 6 3 4 5
C 1 5 2 1
输出:
NAME Max
A 4
B 6
C 5
SQL小提琴: http://sqlfiddle.com/#!4/ae268/7 / 0
输入:
name m1 m2 m3 m4
A 1 2 3 null
B 6 null 4 5
C 1 5 2 1
输出:
NAME Max
A 3
B 6
C 5
不隶属于 StackOverflow