Hive 查询:如何将 group by 与排名一起使用?

Hive Query: How to use group by with rank?

我有一个 table 如下所示

year                            int                                                                                                                   
month                           int                                                                                                                   
symbol                          string                                                                                                                
company_name                    string                                                                                                                
sector                          string                                                                                                                
sub_industry                    string                                                                                                                
state                           string                                                                                                                
avg_open                        double                                                                                                                
avg_close                       double                                                                                                                
avg_low                         double                                                                                                                
avg_high                        double                                                                                                                
avg_volume                      double         

avg_开头的字段是指一年中一个月的平均值。我需要为每个部门找到 avg_close 平均值最低的年份。

我试着做了如下的事情

SELECT sector, year FROM
  (
    SELECT sector, year, RANK() OVER (ORDER BY s2.yearly_avg_close) AS RANK FROM
      ( SELECT year,sector, AVG(avg_close) AS yearly_avg_close FROM stock_summary GROUP BY sector, year) s2
  ) s1 
WHERE
  s1.RANK = 1;

但这只是打印一个扇区和年份,如下所示

Telecommunications Services     2010

我是 Hive 的新手,玩过一些玩具模式。谁能告诉我解决这个问题的正确方法是什么?

Hive 版本 - 1.1.0

sector包含在rank()函数中的partition by中:

SELECT sector, year, RANK() OVER (partition by sector ORDER BY s2.yearly_avg_close) AS RANK

如果您需要每个 sectoryear

的排名,请添加 year

另请阅读排名如何运作的解释: