oracle 按条件汇总,oracle - 如何根据各种条件进行汇总 - SO中文参考 - www.soinside.com...

假设我有一个表,用于存储一段时间内的itemID,Date和total_shipped:ItemID | Date | Total_shipped

__________________________________

1 | 1/20/2000 | 2

2 | 1/20/2000 | 3

1 | 1/21/2000 | 5

2 | 1/21/2000 | 4

1 | 1/22/2000 | 1

2 | 1/22/2000 | 7

1 | 1/23/2000 | 5

2 | 1/23/2000 | 6

现在,我想基于多个时间段进行汇总。例如,我想知道每两天总共寄出了多少个物品。因此,所需的输出应类似于:ItemID | Jan20-Jan21 | Jan22-Jan23 | Jan20-Jan23

_____________________________________________

1 | 7 | 6 | 13

2 | 7 | 13 | 20

我如何以最有效的方式做到这一点我知道我可以进行三个不同的子查询,但是我认为应该有更好的方法。我的真实数据很大,因此需要考虑几个不同的时间段。 e。在我真正的问题中,我想要current_week,last_week,two_weeks_ago,three_weeks_ago,last_month,two_months_ago,three_months_ago的已发货商品,所以我认为编写7个不同的子查询不是一个好主意。这是我已经可以运行但对于数据库而言非常昂贵的一般想法WITH

sq1 as (

SELECT ItemID, sum(Total_shipped) sum1

FROM table

WHERE Date BETWEEN '1/20/2000' and '1/21/2000'

GROUP BY ItemID),

sq2 as (

SELECT ItemID, sum(Total_Shipped) sum2

FROM table

WHERE Date BETWEEN '1/22/2000' and '1/23/2000'

GROUP BY ItemID),

sq3 as(

SELECT ItemID, sum(Total_Shipped) sum3

FROM Table

GROUP BY ItemID)

SELECT ItemID, sq1.sum1, sq2.sum2, sq3.sum3

FROM Table

JOIN sq1 on Table.ItemID = sq1.ItemID

JOIN sq2 on Table.ItemID = sq2.ItemID

JOIN sq3 on Table.ItemID = sq3.ItemID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值