对于Oracle所有列里面获取最大值


例:ID    PID     SID
       1         2        3
       4         5        6
       7         8        9

结果:  ID        PID      SID      MAX_ID
           1          2           3          9
           4          5           6          9
           7          8           9           9

--测试数据
WITH TEST AS (SELECT 1 ID,2 PID,3 SID FROM DUAL
UNION ALL
SELECT 4 ID,5 PID,6 SID FROM DUAL
UNION ALL
SELECT 7 ID,8 PID,9 SID FROM DUAL )
 

--首先思路是取出横向最大值
SELECT GREATEST(ID,PID,SID) FROM TEST;

--然后竖向取最大值
SELECT MAX(GREATEST(ID,PID,SID)) MAX_ID FROM TEST;

--再将MAX_ID拼倒最后一列
SELECT * FROM TEST,(SELECT MAX(GREATEST(ID,PID,SID)) MAX_ID FROM TEST) T;

--这样写考虑效率问题,存在TEST扫描两次。使用分析函数避免此问题。
SELECT TEST. *,MAS(GREATEST(TEST. ID,TEST. PID,TEST. SID)) OVER (PARTITION BY 1) FROM TEST ;

注:如有更好建议欢迎留言私密。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值