gpt4 book ai didi

mysql - 根据产品和付款表列出用户及其财务余额

转载 作者:行者123 更新时间:2023-11-29 06:50:56 27 4
gpt4 key购买 nike

我有一个用户表:

用户表

╔════╦══════╗
║ ID ║ NAME ║
╠════╬══════╣
║ 1 ║ A ║
║ 2 ║ B ║
║ 3 ║ C ║
╚════╩══════╝

PAYMENT 表

╔════╦═════════╦════════╗
║ ID ║ USER_ID ║ AMOUNT ║
╠════╬═════════╬════════╣
║ 1 ║ 1 ║ 2000 ║
║ 2 ║ 1 ║ 1000 ║
║ 3 ║ 1 ║ 1000 ║
║ 4 ║ 2 ║ 1000 ║
╚════╩═════════╩════════╝

产品表

╔════╦═════════╦════════╗
║ ID ║ USER_ID ║ AMOUNT ║
╠════╬═════════╬════════╣
║ 1 ║ 1 ║ 1000 ║
║ 2 ║ 1 ║ 1000 ║
║ 3 ║ 1 ║ 1000 ║
║ 4 ║ 2 ║ 500 ║
║ 5 ║ 2 ║ 500 ║
║ 6 ║ 3 ║ 1000 ║
╚════╩═════════╩════════╝

现在我想得到这样的结果:

╔════╦══════╦═════════════════╗
║ ID ║ NAME ║ BALANCE ║
╠════╬══════╬═════════════════╣
║ 1 ║ A ║ +1000 (or 1000) ║
║ 2 ║ B ║ 0 ║
║ 3 ║ C ║ -1000 ║
╚════╩══════╩═════════════════╝

最佳答案

您不能直接连接表,因为表 users 上的记录在另一个表上有多个匹配项,而有些则没有,这会导致无效结果。我能想到的最好的方法是计算每个用户在不同表上的总和,并将结果加入表user

SELECT  a.*,
COALESCE(b.totalPayed,0) - COALESCE(c.total,0) balance
FROM user a
LEFT JOIN
(
SELECT user_ID, SUM(amount) totalPayed
FROM payment
GROUP BY user_ID
) b ON a.ID = b.user_ID
LEFT JOIN
(
SELECT user_ID, SUM(amount) total
FROM product
GROUP BY user_ID
) c ON a.ID = c.user_ID

输出

╔════╦══════╦═════════╗
║ ID ║ NAME ║ BALANCE ║
╠════╬══════╬═════════╣
║ 1 ║ A ║ 1000 ║
║ 2 ║ B ║ 0 ║
║ 3 ║ C ║ -1000 ║
╚════╩══════╩═════════╝

要进一步了解有关联接的更多信息,请访问以下链接:

关于mysql - 根据产品和付款表列出用户及其财务余额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15451622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com