如何识别每行最大值的列

塞巴斯蒂安·胡巴德

我有一个表格,如下所示:

--------------------------------
ENTITY  |  VALUE X  |  VALUE Y  
--------------------------------
AAA     |    100    |    50     
--------------------------------
BBB     |     0     |    20      
--------------------------------
CCC     |    null   |    null   
--------------------------------
DDD     |    100    |    100    
--------------------------------

我想确定哪一列(X或Y)具有最大的值(在我的实际数据集中有五列,但为简单起见,我在此使用两列)。

如果两者都为空,我希望结果为空。

如果发生平局,我想为平局者设定一个等级(x> y> z ...)

所需的输出如下所示

---------------------------------------------------
ENTITY  |  VALUE X  |  VALUE Y  |  DESIRED OUTPUT  
---------------------------------------------------
AAA     |    100    |    50     |         X        
---------------------------------------------------
BBB     |     0     |    20     |         Y          
---------------------------------------------------
CCC     |    null   |    null   |       null       
---------------------------------------------------
DDD     |    100    |    100    |         X        
---------------------------------------------------

我一直在尝试使用,MAX()但是我认为这主要是为了比较列中的行,而不是相反。

任何帮助将不胜感激。谢谢!

戈登·利诺夫

您可以通过case逻辑来做到这一点假设没有一个值是NULL

select t.*,
       (case greatest(x, y)
            when x then 'x'
            when y then 'y'
        end) 
from t;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章