在Hive中按唯一ID聚合获取sleep列的最小与最大值
解决Hive中每个唯一ID仅展示一行最小/最大Sleep值的问题
我来帮你搞定这个问题~你当前的查询之所以会出现同一个ID对应多条记录的情况,核心原因是你同时按title和id进行分组了——如果同一个ID关联了不同的title,Hive就会把每一组(title, id)当成独立的聚合单元,自然输出多行结果。
要实现每个唯一ID仅展示一行(包含该ID的最小/最大sleep值),你需要调整分组逻辑,只按id聚合即可,下面分两种场景给出解决方案:
场景1:不需要展示title,或同一ID的title完全一致
直接修改查询,去掉title的分组和查询(如果不需要展示),或者保留但确保同一ID的title唯一:
select id, min(sleep) as min_sleep, max(sleep) as max_sleep from myTable group by id;
场景2:同一ID有不同title,需要保留title信息
如果同一个ID对应多个不同的title,你可以用Hive的聚合函数来处理title,比如:
- 取该ID对应的第一个title(使用
first_value):
select id, first_value(title) over (partition by id) as title, min(sleep) as min_sleep, max(sleep) as max_sleep from myTable group by id;
- 把该ID所有不同的title收集成一个集合(使用
collect_set):
select id, collect_set(title) as associated_titles, min(sleep) as min_sleep, max(sleep) as max_sleep from myTable group by id;
简单总结下:你的核心需求是按id做聚合,所以把group by子句里的title去掉,就能让每个ID只输出一行结果啦~
内容的提问来源于stack exchange,提问作者jumpman8947
相关产品推荐
相关产品推荐

