如何找到每行中的最小值以及 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;
例如: 在如下 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;