SQL分组聚合后的关联处理

15 篇文章 0 订阅
14 篇文章 0 订阅

 

在进行表关联时,理想的情况是多张表的原表数据直接可以进行关联,形成关联结果。

在特殊情况下,需要对原始表的记录进行提前处理,将处理之后的结果再进行关联,以保证关联之后结果的正确性。

聚合关联就是一种比较常见的场景,即将每张表分别先进行聚合处理,然后按照对应关联字段将聚合结果进行关联。

例如,有两张原始明细表,分别是销售记录表和成本记录表。每个客户有多个订单,每个订单有多条销售记录,每个订单对应多条成本记录,销售记录和成本记录是多对多的关系,需要计算每个客户、每个订单的销售额、成本、毛利和毛利率,不能直接进行两表关联,直接关联数据会出现冗余。

Sql脚本:

select t1.*,t2.成本,t1.销售金额-t2.成本 as 毛利,

/*计算毛利率*/

case when t1.销售金额=0 then 0 else (t1.销售金额-t2.成本)/t1.销售金额 end as 毛利率 from (

/*按照客户、订单号对销售额进行聚合*/

select [CUSTOMER NAME],SUBSTRING([JOB],5,LEN([JOB])-4) 订单号,SUM(amount) 销售金额 from 销售记录

group by [CUSTOMER NAME],SUBSTRING([JOB],5,LEN([JOB])-4)

) t1

left join

/*聚合结果进行关联*/

(

/*按照客户、订单号对成本进行聚合*/

select [CUSTOMER NAME],SUBSTRING([JOB],5,LEN([JOB])-4) 订单号,SUM(amount) 成本 from 成本记录

group by [CUSTOMER NAME],SUBSTRING([JOB],5,LEN([JOB])-4)

) t2

on t1.[CUSTOMER NAME]=t2.[CUSTOMER NAME] and t1.订单号=t2.订单号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值