Hive Query:如何使用 group by 和 rank?
Posted
技术标签:
【中文标题】Hive Query:如何使用 group by 和 rank?【英文标题】:Hive Query: How to use group by with rank? 【发布时间】:2020-03-13 04:36:23 【问题描述】:我有一张像下面这样的表格
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
【问题讨论】:
【参考方案1】:将sector
包含在partition by
的rank()
函数中:
SELECT sector, year, RANK() OVER (partition by sector ORDER BY s2.yearly_avg_close) AS RANK
如果您需要每个sector
和year
的排名,也可以添加year
另请阅读此解释排名如何工作:https://***.com/a/55909947/2700344
【讨论】:
以上是关于Hive Query:如何使用 group by 和 rank?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 group by(基于一列)从表中选择多列,在 hive 查询中具有和计数
hive3之执行计划(Explain)Fetch 抓取本地模式表的优化Group By笛卡尔积行列过滤
hive3之执行计划(Explain)Fetch 抓取本地模式表的优化Group By笛卡尔积行列过滤