oracle根据条件统计各组记录数量

1. 根据具体条件统计这批数据落到每组的数量 

select to_char(TIMESTAMP, 'yyyy-mm-dd') column1, column2, column3,
       count(CASE WHEN DURATION<30*60 THEN 1 END) less30,
       count(CASE WHEN DURATION>=30*60 and DURATION<60*60*1000 THEN 1 END) more30less60,
       count(CASE WHEN DURATION>=60*60 and DURATION<120*60*1000 THEN 1 END) more60less120,
       count(CASE WHEN DURATION>=120*60 and DURATION<360*60*1000 THEN 1 END) more120less360,
       count(CASE WHEN DURATION>=360*60 THEN 1 END) more360
from user_table1
where to_char(TIMESTAMP, 'yyyy-mm-dd') in ('2019-09-16', '2019-09-15')
group by to_char(TIMESTAMP, 'yyyy-mm-dd'), column2, column3;

2. 将上面的数量merge into到另一个新的table(存在即跟新,不存在即插入)

merge into user_table2 t1
using (select to_char(TIMESTAMP, 'yyyy-mm-dd') column1,
              column2,
              column3,
              count(CASE WHEN DURATION < 30 * 60 THEN 1 END)                                     less30,
              count(CASE WHEN DURATION >= 30 * 60 and DURATION < 60 * 60 * 1000 THEN 1 END)   more30less60,
              count(CASE WHEN DURATION >= 60 * 60 and DURATION < 120 * 60 * 1000 THEN 1 END)  more60less120,
              count(CASE WHEN DURATION >= 120 * 60 and DURATION < 360 * 60 * 1000 THEN 1 END) more120less360,
              count(CASE WHEN DURATION >= 360 * 60 THEN 1 END)                                   more360
       from user_table1
       where to_char(TIMESTAMP, 'yyyy-mm-dd') in ('2019-09-16', '2019-09-15')
       group by to_char(TIMESTAMP, 'yyyy-mm-dd'), column2, column3) t2
on (t1.column1 = t2.column1 and t1.column2 = t2.column2 and t1.column3 = t2.column3)
WHEN MATCHED THEN
  update set t1.less30 = t2.less30,
    t1.more30less60    = t2.more30less60,
    t1.more60less120   = t2.more60less120,
    t1.more120less360  = t2.more120less360,
    t1.more360         = t2.more360
WHEN NOT MATCHED THEN
  INSERT (t1.column1, t1.column2, t1.column3, t1.LESS30, t1.MORE30LESS60, t1.MORE60LESS120, t1.MORE120LESS360, t1.MORE360)
  values (t1.column1, t2.column2, t2.column3, t2.less30, t2.more30less60, t2.more60less120, t2.more120less360, t2.more360);

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值