mysql获取下级员工合计销量

销售员数据表:

create table salers(
salerId                int not null  , --销售员编号
salername            varchar(32),    --销售员姓名
parentid        int,            --上级编号
 primary key (salerId)    
)  

--单据表:

create table salebill(
BillId                int not null  , --单据编号
salerId            int,                --销售员编号
amount            int,                --销售金额
 primary key (BillId)
)

--造数据:
insert into salers(salerId,salername,parentid)
values(1,'张大',null),
 (2,'张一',1),
 (3,'张二',2),
 (4,'张三',3),
 (5,'李大',null),
 (6,'李一',5),
 (7,'李二',6),
 (8,'李三',7),
 (9,'张四',1),
 (10,'张五',1)  


insert into salebill(BillId,salerId,amount)
values(1,1,5),
 (2,2,2),
 (3,2,1),
 (4,3,2),
 (5,8,3),
 (6,10,4),
 (7,5,10),
 (8,7,3) 

求一mysql语句,根据类似上面造的数据(实际销售员工数据50多人,销售单据数据达到10万条),获得如下图结果(请不要使用with as):

 

 

 

思路:
1:把单据表根据业务员Id分组 汇总成单总额。
2:业务员表与汇总表根据业务员Id左连接。注意,一定要左链接,因为实际情况中不是所有的业务员都会有成单记录

select 
a.salerId,a.salername, b.totalamount 
from salers a 
left join(
select salerId,sum(amount) as totalamount from salebill group salerId) 
as b 
on a.salerId =b.salerId 

select
    a.salerId
    ,a.salername
    ,sum(b.amount)
from (
    select
        salerId
        ,salername
    from salers
) a
join
(
    select
        salerId
        , amount
    from
        salebill
) b on a.salerId = b.salerId
group by a.salerId