Oracle SQL查询分组依据

axkjgtzd  于 2022-10-04  发布在  Oracle
关注(0)|答案(1)|浏览(243)

我这里有一个名为percentage的表,它包含保单编号、优先级和百分比。

我需要创建一个SQL查询来汇总每个策略的这些百分比。问题是我有一个需要遵循的优先级列。这意味着,在应用下一个百分比之前,您需要首先扣除前一个百分比。你必须重复这一点,直到最后一个百分比。我曾尝试在谷歌上搜索,但无济于事。希望你们能在这件事上帮我。

您可以在此处访问该表:https://dbfiddle.uk/r8rhgjhF

p1tboqfb

p1tboqfb1#

  1. select * from percentage
  2. model return updated rows
  3. partition by (policy)
  4. dimension by (priority p)
  5. measures ( 1 q , percentage pc)
  6. rules (
  7. q[p] = NVL(q[cv()-1] + (1-q[cv()-1]) * pc[cv()],pc[cv()])
  8. )
  9. ;

会给你带来

  1. 55188 1 0,3 0,3
  2. 55188 2 0,65 0,5
  3. 55166 1 0,65 0,65
  4. 55166 2 0,811 0,46
  5. 55166 3 0,8488 0,2

可以使用解析函数来选择优先级为每个策略的最大值的行。

  1. select policy, p, q from (
  2. select row_number() over(partition by policy order by p desc) as rn, policy, p, q from (
  3. select policy, p, q from percentage
  4. model return updated rows
  5. partition by (policy)
  6. dimension by (priority p)
  7. measures ( 1 q , percentage pc)
  8. rules (
  9. q[p] = NVL(q[cv()-1] + (1-q[cv()-1]) * pc[cv()],pc[cv()])
  10. )
  11. ) d
  12. )
  13. where rn = 1
  14. ;
展开查看全部

相关问题