如何用单条Hive查询计算各航空公司平均延误时长的最大值?
单条Hive查询实现航空公司延误时长平均值的最大值
当然可以!完全不需要创建额外的中间表,用两种常见的Hive查询写法就能搞定这个需求:
方法一:使用子查询
把计算各航空公司平均延误的逻辑放在子查询里,外层直接对这些平均值取最大值即可:
SELECT MAX(avg_delay) AS max_avg_delay FROM ( -- 子查询:按航空公司分组计算平均延误时长 SELECT AVG(delay) AS avg_delay FROM flightdelays2 GROUP BY airline ) AS avg_delays_subquery;
这个语句的逻辑很清晰:内层先完成分组求平均的操作,外层直接基于这些结果取最大值,全程不需要落地中间表。
方法二:使用窗口函数
利用窗口函数MAX() OVER()也能实现,这种写法更灵活,适合后续扩展其他分析需求:
SELECT DISTINCT MAX(AVG(delay)) OVER() AS max_avg_delay FROM flightdelays2 GROUP BY airline;
这里先按airline分组计算每个公司的平均延误,然后通过窗口函数在所有分组的平均值中找出最大值,最后用DISTINCT去重(因为每个分组都会返回同一个最大值,去重后只保留唯一结果)。
两种写法都能达到你的需求,子查询更直观易懂,窗口函数则在复杂分析场景下更有优势,你可以根据实际情况选择。
内容的提问来源于stack exchange,提问作者bablu bhadrecha
相关产品推荐
相关产品推荐

