条件复杂的sql语句查询

时间:2020-12-08 22:27:53
有三张表 分别为 会员表(member) 销售表(sale) 退货表(regoods)
会员表有字段 memberid (会员id,主键) credits(积分); 
销售表有字段 memberid(会员id ,外键) 购买金额(MNAccount);
退货表中有字段memberid(会员id ,外键) 退货金额(RMNAccount);
业务说明 : 1、销售表中的销售记录可以是会员购买,也可是非会员购买。(即销售表中的memberid可以为空)
2、销售表中的一个会员可以有多条购买记录
3、退货表中的退货记录可以是会员,也可是非会员
4、一个会员可以有一条或多条退货记录

查询需求 : 分组查出销售表中所有会员购买金额,同时分组查出退货表中所有会员的退货金额,把会员id相同的购买金额-退款金额得到的结果更新到表会员表中对应会员的积分字段(credits)

SELECT
s.memberid,
s.y1,
s1.y2,
(s.y1 - s1.y2)
FROM
(
SELECT
y.memberid,
sum(y.MNAccount) y1
FROM
member d
LEFT JOIN sale y ON d.memberid = y.memberid
GROUP BY
y.memberid
) s
LEFT JOIN (
SELECT
y.memberid,
sum(y.RMNAccount) y2
FROM
member d
LEFT JOIN regoods y ON d.memberid = y.memberid
GROUP BY
y.memberid
) s1 ON s.memberid = s1.memberid