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
如果您需要每个 sector
和 year
的排名,请添加 year
另请阅读排名如何运作的解释:
我有一个 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
如果您需要每个 sector
和 year
year
另请阅读排名如何运作的解释: