Hive如何从行中选择最大值并连接到另一个表

yhuiod9q  于 2021-04-02  发布在  Hive
关注(0)|答案(2)|浏览(528)

我想根据值列的最大值来连接两张表。

select * from order
-------------------------
| ID    |  value | Name |
-------------------------
|  1    |  23    | REM  |
|  2    |  0     | SER  |
|  3    |  13    | MH   |
|  4    |  3     | MH   |
|  5    |  1     | MP   |
-------------------------

select * from product
-------------------------
| ID    | value  | Name |
-------------------------
|  1    |   2    | ABC  |
|  2    |  2    | DEG  |
|  3    |  17    | XYZ  |
-------------------------

Desired result:
-------------------------
| ID    | Value  | Name |
-------------------------
| 1     |  23    | REM  |
| 2     |  2    | DEG  |
| 3     |  17    | XYZ  |
| 4     |   3    | MH   |
| 5     |   1    | MP   |
-------------------------

我已经尝试了下面的东西,但它不是从其他表获取值(名称)。

SELECT
 MAX(IF(a.value >b.value , a.value ,b.value )) AS Value
  from order a left join product b on a.ID= b.ID

请建议如何从这两张表中得到预期的结果。

vxf3dgd4

vxf3dgd41#

你可以使用 "完全连接 "来实现。

select id,
       (case when p.val is null or p.val < o.val then o.val else p.val end),
       (case when p.val is null or p.val < o.val then o.name else p.name end)     
from product p full join
     order o
     using (id);

我只是觉得这是最简单的思考问题的方式。

bogh5gae

bogh5gae2#

以下是bigquery标准的sql。


# standardsql

select as value array_agg(struct(id, value, name) order by value desc limit 1)[offset(0)]
from 
(
  select * from `project.dataset.order`
  union all
  select * from `project.dataset.product`
)
group by id

有产出

相关问题