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 列值的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 查询,其中列值大于相关模型列值的总和

使用 Django 查询计算过滤列值的总和时出错

Django:分组然后通过查询计算列值的总和

python, pyspark : 获取 pyspark 数据框列值的总和

对应列值的最小值求和

SQL Group By以获取列值的计数