我有一种情况,我需要从三列中选择行中的最大值,有一个名为Greatest的函数,但在我的Hive 0.13版本中不起作用。

请提出更好的方法来实现它。

表格示例:

+---------+------+------+------+
| Col1    | Col2 | Col3 | Col4 |
+---------+------+------+------+
| Group A | 1    | 2    | 3    |
+---------+------+------+------+
| Group B | 4    | 5    | 1    |
+---------+------+------+------+
| Group C | 4    | 2    | 1    |
+---------+------+------+------+

预期结果:
+---------+------------+------------+
| Col1    | output_max | max_column |
+---------+------------+------------+
| Group A | 3          | Col4       |
+---------+------------+------------+
| Group B | 5          | col3       |
+---------+------------+------------+
| Group C | 4          | col2       |
+---------+------------+------------+

最佳答案

select  col1
       ,tuple.col1                as output_max
       ,concat('Col',tuple.col2)  as max_column

from   (select  Col1
               ,sort_array(array(struct(Col2,2),struct(Col3,3),struct(Col4,4)))[2] as tuple
        from    t
        ) t
;


hive> select  col1
    >        ,tuple.col1                as output_max
    >        ,concat('Col',tuple.col2)  as max_column
    >
    > from   (select  Col1
    >                ,sort_array(array(struct(Col2,2),struct(Col3,3),struct(Col4,4)))[2] as tuple
    >         from    t
    >         ) t
    > ;
OK
Group A 3   Col4
Group B 5   Col3
Group C 4   Col2

关于sql - 在Hive中获取具有行的最大值的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42098855/

10-10 23:40