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

本文介绍了一种使用SQL进行数据统计的方法,通过CASE WHEN语句按不同时间段统计数量,并展示了如何将这些统计数据合并到另一个表中。适用于需要定期进行数据汇总分析的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值