你好,这是我的情况,我有这些表格:
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;
如果我有一个顾客收费,但对应该次收费有两种税收,那么在使用SUM函数时,它将会把这个收费金额计算两次。例如,如果要显示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;