我有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

我需要尊重前三名的gst字段以及相应的key_id。

要求的输出:
key_id  gst_top1   gst_top2   gst_top3
1245      4          2           5
1246      5          1           4

我可以在单个列值中获取top3 gst值,但无法通过将top3与3个不同的字段分开来实现。

最佳答案

您可以通过几个聚合级别来做到这一点:

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;

关于sql - 配置单元查询以使用其他列值的总和获得前3个列值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55975591/

10-12 21:53