Hive 查询以使用其他列值的总和获取前 3 列值
Posted
技术标签:
【中文标题】Hive 查询以使用其他列值的总和获取前 3 列值【英文标题】:Hive query to get top 3 column values using sum of other column value 【发布时间】:2019-05-03 18:48:20 【问题描述】:我有 3 列,分别是 Key_id、gst、claim_amnt。 单个 key_id 将具有多个 gst 值,单个 gst 值具有多个 claim_amnt。例如我有如下表。
Key_id gst claim_amnt
1245 5 235
1245 5 100
1245 4 254
1245 4 542
1245 4 471
1245 2 745
1246 1 24
1246 1 45
1246 5 52
1246 5 42
1246 4 45
根据 key_id 的相应 gst 的 claim_amnt 总和
喜欢
key_id gst (addition of claim_amnt with respect to its gst)
1245 5 335
1245 4 1267
1245 2 745
1246 1 69
1246 5 94
1246 4 45
我需要与 claim_amnt 相关的前 3 个 gst 字段以及相应的 key_id。
需要的输出:
key_id gst_top1 gst_top2 gst_top3
1245 4 2 5
1246 5 1 4
我可以在单个列值中获取 top3 gst 值,但无法通过将 top3 与 3 个不同的字段分开来实现。
【问题讨论】:
【参考方案1】:您可以通过几个级别的聚合来做到这一点:
select key_id,
max(case when seqnum = 1 then gst end) as gst_1,
max(case when seqnum = 2 then gst end) as gst_2,
max(case when seqnum = 3 then gst end) as gst_3
from (select key_id, gst, sum(claim_amt) as claim_amt,
row_number() over (partition by key_id order by sum(claim_amt) desc) as seqnum
from t
group by key_id, gst
)
group by key_id;
【讨论】:
以上是关于Hive 查询以使用其他列值的总和获取前 3 列值的主要内容,如果未能解决你的问题,请参考以下文章