hive查询使用其他列值之和获取前3个列值

iszxjhcz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(434)

我有3列,分别是key\u id,gst,claim\u amnt。单个密钥id将具有多个gst值,单个gst值具有多个索赔金额。例如,我有下面的表格。

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

根据密钥id的相应gst的索赔金额
喜欢

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

我需要前3个gst字段,其中涉及索赔金额以及各自的密钥id。
所需输出:

key_id  gst_top1   gst_top2   gst_top3
1245      4          2           5
1246      5          1           4

我可以在一个列值中获得top3 gst值,但不能通过用3个不同的字段分隔top3来实现。

db2dz4w8

db2dz4w81#

您可以通过几个级别的聚合来实现这一点:

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;

相关问题