执行 INNER JOIN 时查询返回错误值?
Query returning wrong value when doing an INNER JOIN?
我想加入三个表来计算某个 (party_id) 的余额 =(购买 - 付款):
- 派对(party_id,类型,姓名)
- 采购(purchase_id、supplier_id、数量、费率、总计)
- 付款(payment_id、party_id、金额)
从该 ID 购买的总金额 = 20,000,总付款金额 = 15,000,因此其余额应为 = 5,000。使用此代码后:
SELECT
((sum(purchase.total)) - (sum(payments.amount))) AS Party_Balance
FROM
Purchase
INNER JOIN
Party
ON purchase.supplier_id = party.party_id
INNER JOIN
Payments
ON party.party_id = payments.party_id
WHERE
payments.party_id = enter_party_id;
输出不正确:1,000,245 而不是 5,000。
这是我建立关系的方式,有没有关系需要修复?
您必须对 table Party
:
进行 2 个单独的分组
第一个用 Purchase
得到 total
SUM
第二个 Payments
得到 amount
的 SUM
。
然后加入2个子查询并得到 Party_Balance
:
SELECT pur.party_id, pur.total - pay.sumamount AS Party_Balance FROM (
SELECT Party.party_id, SUM(Purchase.total) AS total
FROM Party INNER JOIN Purchase ON Party.party_id = Purchase.supplier_id
GROUP BY Party.party_id
) AS pur
INNER JOIN (
SELECT Party.party_id, SUM(amount) AS sumamount
FROM Party INNER JOIN Payments ON Party.party_id = Payments.party_id
GROUP BY Party.party_id
) AS pay
on pay.party_id = pur.party_id
我想加入三个表来计算某个 (party_id) 的余额 =(购买 - 付款):
- 派对(party_id,类型,姓名)
- 采购(purchase_id、supplier_id、数量、费率、总计)
- 付款(payment_id、party_id、金额)
从该 ID 购买的总金额 = 20,000,总付款金额 = 15,000,因此其余额应为 = 5,000。使用此代码后:
SELECT
((sum(purchase.total)) - (sum(payments.amount))) AS Party_Balance
FROM
Purchase
INNER JOIN
Party
ON purchase.supplier_id = party.party_id
INNER JOIN
Payments
ON party.party_id = payments.party_id
WHERE
payments.party_id = enter_party_id;
输出不正确:1,000,245 而不是 5,000。
这是我建立关系的方式,有没有关系需要修复?
您必须对 table Party
:
进行 2 个单独的分组
第一个用 Purchase
得到 total
SUM
第二个 Payments
得到 amount
的 SUM
。
然后加入2个子查询并得到 Party_Balance
:
SELECT pur.party_id, pur.total - pay.sumamount AS Party_Balance FROM (
SELECT Party.party_id, SUM(Purchase.total) AS total
FROM Party INNER JOIN Purchase ON Party.party_id = Purchase.supplier_id
GROUP BY Party.party_id
) AS pur
INNER JOIN (
SELECT Party.party_id, SUM(amount) AS sumamount
FROM Party INNER JOIN Payments ON Party.party_id = Payments.party_id
GROUP BY Party.party_id
) AS pay
on pay.party_id = pur.party_id