首页 > 解决方案 > IMPALA LEFT 连接子查询

问题描述

假设我有以下数据:

表 ABC

姓名 团体
兹拉坦·伊布拉希莫维奇 第 1 组
克里斯蒂亚诺·罗纳尔多 第 2 组
梅西 第 1 组
爱德华多·佩雷拉·罗德里格斯 第 1 组

我想要什么作为最终结果(下面的组号是随机的):

姓名 团体
兹拉坦·伊布拉希莫维奇 870
克里斯蒂亚诺·罗纳尔多 544
梅西 870
爱德华多·佩雷拉·罗德里格斯 870

为了达到这个结果,我编写了一个在 AWS Athena 中完美运行的查询,如下所示:

select table1.name,
       subQuery1.random_cod_group
from ABC table1
left join(select group, cast(rand(1234) * 100 as integer) as random_cod_group
          from ABC group by group) subQuery1
     on subQuery1.group = table1.group

然而 - 令我惊讶的是 - 当我在“impala”中运行相同的查询时,呈现的结果是不同的,如下例所示。相同的组被呈现不同的数字(而不是为同一组“保持”相同的随机数)

姓名 团体
兹拉坦·伊布拉希莫维奇 987
克里斯蒂亚诺·罗纳尔多 478
梅西 874
爱德华多·佩雷拉·罗德里格斯 75

我真的不明白为什么......有人可以帮助我吗?

非常感谢!

标签: subqueryleft-join

解决方案


也许您可以尝试另一种方法。可能每次调用都会生成一个随机数,这意味着加入不一定是错误的。

如果不强制生成随机数,我建议使用:

select table1.name,
       subQuery1.random_cod_group
from ABC table1
left join(select group, row_number() over (order by group) as random_cod_group
          from ABC group by group) subQuery1 on subQuery1.group = table1.group

推荐阅读