首页  >  问答  >  正文

如何将3个不同的表合并成一个表来创建聚合数据?

希望你们都做得很好! :D

我需要您的帮助来完成以下任务:

我需要创建下表:

日期 从新交易中获得的收入 因流失而损失的收入 追加销售获得的收入
2022 年 1 月 1 日 1000 美元 -$500 1000 美元
2022 年 1 月 2 日 $2000 -$200 $2000

这里的情况是,为了收集和聚合这些数据,我需要获取 3 个不同的表:

交易、流失和追加销售

交易表:

交易 截止日期 赢得的收入
交易#1 2022 年 1 月 1 日 $500
交易#2 2022 年 1 月 1 日 $500
交易 #3 2022 年 1 月 2 日 $1500
交易#4 2022 年 1 月 2 日 $500

流失表:

流失 截止日期 收入损失
流失#1 2022 年 1 月 1 日 -$500
流失#2 2022 年 1 月 2 日 -100 美元
流失#3 2022 年 1 月 2 日 -100 美元

加售表:

追加销售 截止日期 赢得的收入
追加销售#1 2022 年 1 月 1 日 $2000
追加销售 #2 2022 年 1 月 1 日 -1000 美元
追加销售#3 2022 年 1 月 2 日 $2000

第一个问题是: 如何创建 SQL 命令来完成此操作?

提前致谢。

P粉891237912P粉891237912183 天前279

全部回复(1)我来回复

  • P粉674999420

    P粉6749994202024-04-01 00:00:13

    您可以使用子查询对流失表和追加销售表进行聚合。

    如下所示:

    select d.Closing_date,
           sum(d.Revenue_won) as 'Revenue gained from new deals', 
           c.`Revenue lost from churn`,
           u.`Revenue gained from upsell`
    from deals d
    inner join ( select Closing_date,
                        sum(Revenue_lost) as 'Revenue lost from churn'
                from churns 
                group by Closing_date 
                ) as c on c.Closing_date=d.Closing_date
    inner join ( select Closing_date,
                        sum(Revenue_won) as 'Revenue gained from upsell'
                 from upsells u 
                 group by Closing_date 
                 ) as u on  u.Closing_date=d.Closing_date          
    group by d.Closing_date ;

    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0875563c9ab7f9385711dde21cd98b47

    请不要将日期存储为文本,您将面临很多困难。如果你想格式化日期,你可以使用 DATE_FORMAT

    注意。如果交易表中存在其他日期,而其他两个表中不存在,则会从结果中过滤掉该日期。如果您想要它,请使用LEFT JOIN而不是INNER JOIN

    **编辑

    select d.Closing_date,
           d.`Revenue gained from new deals`,
           c.`Revenue lost from churn`,
           u.`Revenue gained from upsell`
    from  ( select Closing_date,
                   sum(Revenue_won) as 'Revenue gained from new deals'
            from deals 
            group by Closing_date ) as d 
    inner join ( select Closing_date,
                        sum(Revenue_lost) as 'Revenue lost from churn'
                from churns 
                group by Closing_date 
                ) as c on c.Closing_date=d.Closing_date
    inner join ( select Closing_date,
                        sum(Revenue_won) as 'Revenue gained from upsell'
                 from upsells u 
                 group by Closing_date 
                 ) as u on  u.Closing_date=d.Closing_date           ;

    https://dbfiddle.uk/S61QeLBX

    回复
    0
  • 取消回复