【问题标题】:Hive query to get top 3 column values using sum of other column valueHive 查询以使用其他列值的总和获取前 3 列值
【发布时间】: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 个不同的字段分开来实现。

【问题讨论】:

    标签: sql hadoop hive hiveql


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2020-07-04
      • 1970-01-01
      相关资源
      最近更新 更多