如何解决如何识别每行最大值的列
我有一个如下表:
result.entityType == 'PostalCodeArea' || result.address.postalCode != null
我想确定哪一列(X或Y)具有最大的值(在我的实际数据集中有五列,为简单起见,我在这里使用两列)。
如果两者都为null,我希望结果为null。
如果出现平局,我想为平局打破者设定等级(x> y> z ...)
所需的输出看起来像下面的
sshagent([sshCredId]){
env.a_var = sh (script: "ssh -o StrictHostKeyChecking=no ${sshUser}@${sshServer} cat /mydir/myfile.csv",returnStdout: true).trim()
}
我一直在尝试使用--------------------------------
ENTITY | VALUE X | VALUE Y
--------------------------------
AAA | 100 | 50
--------------------------------
BBB | 0 | 20
--------------------------------
CCC | null | null
--------------------------------
DDD | 100 | 100
--------------------------------
,但我认为这主要是为了比较列中的行,而不是相反...
任何帮助将不胜感激。谢谢!
解决方法
如果问题中解释的列多于两列,则最具扩展性的方法是使用横向联接。想法是将列取消透视为行,过滤出select t.*,x.*
from mytable t
outer apply (
select col
from (
select 'X' col,t.value_x val from dual
union all select 'Y',t.value_y from dual
) x
where x.val is not null
order by x.val desc
fetch first 1 row only
) x
值,然后按降序排列,并仅保留第一行:
{{1}}
README :
ENTITY | VALUE_X | VALUE_Y | COL :----- | ------: | ------: | :--- AAA | 100 | 50 | X BBB | 0 | 20 | Y CCC | null | null | null DDD | 100 | 100 | X,
您可以使用case
逻辑进行此操作。假设所有值都不是NULL
:
select t.*,(case greatest(x,y)
when x then 'x'
when y then 'y'
end)
from t;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。