【发布时间】:2016-10-29 21:37:02
【问题描述】:
嗨,这是我的情况,我有这些表
Customer {id,name}
Charges {id,amount,customer_id}
Taxes {id,amount,charge_id}
所以我想对费用和税金进行求和,然后按客户 ID 分组这是我的查询
SELECT SUM(ch.amount),SUM(t.amount)
FROM Customer c
LEFT JOIN Charges ch ON ch.customer_id = c.id
LEFT JOIN Taxes t ON t.charge_id = ch.id
GROUP BY c.id;
因此,如果我对客户收取 1 笔费用,而不是使用 SUM 函数收取的 2 笔税款,它会计算两次费用金额,例如,如果显示 10 美元,它会显示 20 美元
我知道如何通过子查询来解决这个问题,但我想知道是否有任何选项可以在没有子查询的情况下获得正确的值,例如我在上面使用的查询,我可以在那里修改来解决这个问题。
谢谢!
没有子查询的更新答案
SELECT
SUM(CASE WHEN @ch_id != ch.id
THEN ch.amount END) AS ch_amount,
SUM(t.amount) AS t_sum,
c.*,
@ch_id := ch.id
FROM
Customer c
LEFT JOIN charges ch ON c.id = ch.reservation_id
LEFT JOIN taxes t ON ch.id = t.charge_id
GROUP BY rs.id;
【问题讨论】: