subquery - 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 |
我真的不明白为什么......有人可以帮助我吗?
非常感谢!
解决方案
也许您可以尝试另一种方法。可能每次调用都会生成一个随机数,这意味着加入不一定是错误的。
如果不强制生成随机数,我建议使用:
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
推荐阅读
- java - 如何将 JButton 添加到 JFrame?
- ios - 模拟器中没有 Touch ID / Face ID 提示
- azure - 尝试从 Azure WebJob 写入文件
- java - Android WebView - 2018 年的文本选择侦听器
- c# - Xamarin.Forms C# 属性未在 Device.StartTimer 中更新
- php - 不能在 laravel 5.4 中使用 stdClass 类型的对象作为数组
- c - 如何使用没有数组的for循环编写在c中打印特定数字螺旋图案的代码
- git - Jenkins 流水线 Git 推送
- utf-8 - Rust UTF-8 错误,线程 'main' 在 '调用 `Result::unwrap() 处惊慌失措
- c# - 如何在 DotVVM 项目中实现 MVVM Light INavigationService