Hive查询:如何使用按排名分组?

问题描述 投票:1回答:1

我有一个类似下面的表格

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版本-1.1.0

hadoop hive hiveql hive-query
1个回答
0
投票

sector包括在partition by功能的rank()中:

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

如果需要每个yearsector的排名,也要添加year >>

也请阅读此说明,等级如何工作:https://stackoverflow.com/a/55909947/2700344

© www.soinside.com 2019 - 2024. All rights reserved.