sql—在表中插入与打开的行数相等的行数(如果有15行以上的行)

xwbd5t1u  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(299)

我的table

  1. id sum type
  2. 1 3 -1
  3. 1 6 -1
  4. 1 -6 2
  5. 1 -3 1
  6. 1 3 -1
  7. 1 6 -1

这些

  1. 1 3 -1

是开放行。类型始终为-1。总和可以不同。
这些

  1. 1 -6 2

是封闭行。类型!=-1.sum=-开放行的sum
这些行

  1. 1 3 -1
  2. 1 6 -1
  3. 1 -6 2
  4. 1 -3 1

会互相否定。这些

  1. 1 3 -1
  2. 1 6 -1

会留下来的。如果最后打开的行数大于15,那么对于每个打开的行,我需要在表中插入一行,其中sum是-打开行的sum,type是2。
分组

  1. select id
  2. , sum
  3. , sum(
  4. case
  5. when type = -1 then 1
  6. when type != -1 then -1
  7. else 0
  8. end
  9. ) as num
  10. from table
  11. group by id, sum
  12. id sum num
  13. 1 3 2
  14. 1 6 2
  15. 1 -6 2
  16. 1 -3 1

也许能帮我找到密码。但我不知道以后该怎么办。

qcuzuvrc

qcuzuvrc1#

  1. select t.val_id
  2. ,t.val_sum
  3. ,2 as val_type
  4. from (select val_id
  5. ,-abs (val_sum) as val_sum
  6. ,sum (case when val_type = -1 then 1 else -1 end) as occurrences
  7. from mytable
  8. group by val_id
  9. ,abs (val_sum)
  10. having sum (case when val_type = -1 then 1 else -1 end) > 15
  11. ) t
  12. lateral view explode (split (space (cast (occurrences as int) - 1),' ')) e
  13. ;

相关问题