销售员数据表:
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