hadoop - Hive Query:如何使用 group by 和 rank?
问题描述
我有一张如下表
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
我是蜂巢的新手,并且玩弄了一些玩具模式。有人可以让我知道解决这个问题的正确方法是什么吗?
蜂巢版本 - 1.1.0
解决方案
包含sector
在函数partition by
中:rank()
SELECT sector, year, RANK() OVER (partition by sector ORDER BY s2.yearly_avg_close) AS RANK
year
如果您需要每个排名,也sector
可以添加year
另请阅读此解释排名如何工作:https ://stackoverflow.com/a/55909947/2700344
推荐阅读
- javascript - 启用后单击触发器在禁用按钮上不起作用
- javascript - 删除了 Class 并希望将其添加回来
- constraints - QGIS3条目约束强制执行非空约束但允许零作为值
- unity3d - unity不显示对撞机
- javascript - 为什么这两个函数有这么大的性能差异?我改变的是价值声明的地方
- c# - 在 FormCollection MVC 表单中传递的复选框值
- javascript - 获取网页的 URL,不包括组件的 URL
- node.js - Nodejs后端如何摆脱html标签
- json - 在 .NET Core 3 中序列化 Manatee.Json
- android - 检测 webview 中的状态变化