如何找到每行中的最小值以及 sql/hive 中的列名

How to find the minimum value in each row along with column name in sql/hive

例如: 在如下 table 中:

编号 第 1 栏 第 2 栏 第 3 栏 第 4 栏
1 10 29 40 74
2 14 19 41 11
3 9 19 47 77
4 27 79 43 70

我的输出应该 return 两列,如下面 table 所示:

编号 第 1 栏 第 2 栏 第 3 栏 第 4 栏 最小值 列名
1 10 29 40 74 10 col1
2 14 19 41 11 11 col4
3 9 19 47 77 9 col1
4 27 79 43 70 27 col1

您可以使用 least():

select t.*,
       least(col1, col2, col3, col4) as min_val,
       (case least(col1, col2, col3, col4)
            when col1 then 'col1'
                 col2 then 'col2'
                 col3 then 'col3'
                 col4 then 'col4'
        end) as min_val_columnname
from t;