【问题标题】:Create Aggregate Table from binary columns on SQL从 SQL 上的二进制列创建聚合表
【发布时间】:2022-06-15 01:19:01
【问题描述】:

表1

customerid jan21 feb21 mar21 apr21
123 1 0 0 1
124 0 1 0 1
125 0 0 1 1
126 1 1 0 1

我有一个如上所述的表,我想创建另一个这样的表:

表2

month jan21 feb21 mar21 apr21
jan21 2 0 0 2
feb21 - 2 0 2
mar21 - - 1 2
apr21 - - - 4

基本上,我想计算每个月有多少客户是活跃的,条件是他们在给定月份是活跃的。

我把桌子的左侧留空,因为它将是右侧的对称,但如果有人可能会提出一个解决方案填充桌子的两侧,它仍然非常受欢迎。

我用很多子查询和 WHERE 条件来做这件事,我每个月都会通过每次更改每个月的 where 条件来求和。但是,它非常耗时,我想知道是否有一次性 SQL 查询来完成这项任务。

顺便说一句,我正在研究 POSTGRESQL。

这是我的查询。我还在查询中创建 table1

我每个月都会更改jan21 = 1

select 
sum(jan21) as jan21,
sum(feb21) as feb21,
sum(mar21) as mar21,
sum(apr21) as apr21 

from(
select customerid, 
sum(jan21) as jan21,
sum(feb21) as feb21,
sum(mar21) as mar21,
sum(apr21) as apr21 
from (
with orders as (
select customerid, to_char(orderdate, 'YYYYMM') as orderdate
from ordertable
group by customerid, orderdate
    )
select distinct customerid,
    case 
    when orderdate = '202101' then 1 else 0 end as jan21,
    case 
    when orderdate = '202102' then 1 else 0 end as feb21,
    case 
    when orderdate = '202103' then 1 else 0 end as mar21,
    case 
    when orderdate = '202104' then 1 else 0 end as apr21        
from orders
) t1 group by customerid
) t25
where jan21 = 1 

【问题讨论】:

  • 你能分享你在这个问题上的编码尝试吗?也许这可能是改进解决方案的一个很好的起点。
  • 我添加了我的工作@lemon

标签: sql postgresql subquery pivot-table


猜你喜欢
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 2016-07-29
  • 1970-01-01
  • 2015-08-07
  • 2015-04-06
相关资源
最近更新 更多