Apache Hive中SELECT MAX带GROUP BY查询返回全表所有行问题
Apache Hive查询结果不符合预期的错误分析
你使用的原始查询语句如下:
SELECT date_col,max(rate) FROM crypto group by date_col ;
核心错误原因
你在查询中使用了GROUP BY date_col子句,该语法的作用是将表中所有数据按date_col字段的取值做分组,对每一组单独执行聚合计算(也就是你写的max(rate))。所以最终返回的行数等于crypto表中date_col字段去重后的取值数量,自然会返回多行结果,和你预期的全局唯一1行结果的需求不符。
符合预期的正确写法
如果你的需求是获取整张表的最大rate值,以及该最大值对应的date_col,可以选择以下两种写法:
- 仅需要全局最大
rate值,不需要对应日期:
SELECT max(rate) FROM crypto;
- 需要同时获取最大
rate对应的date_col:
SELECT date_col, rate FROM ( SELECT date_col, rate, ROW_NUMBER() OVER(ORDER BY rate DESC) AS rank_num FROM crypto ) tmp WHERE rank_num = 1;
内容的提问来源于stack exchange,提问作者sheharbano
相关产品推荐
相关产品推荐

