【发布时间】:2026-02-05 07:20:03
【问题描述】:
将此问题移至 DBA STACKEXCHANGE: https://dba.stackexchange.com/questions/137878/postgresql-join-subquery-cant-restrict-query
我正在开展一个支票拆分项目,该项目拆分某项活动的欠款。用户可以属于多个“组”,每个“组”都有自己的运行余额。
我正在尝试运行一个查询,该查询将返回所有组中单个用户的“欠款”。
目前查询如下所示:
SELECT
SUM(owe)
FROM (
SELECT
(expenses.amount/count(*))
AS owe
FROM expenses
LEFT JOIN user_expenses
ON (
expenses.id = user_expenses.expense_id
)
WHERE expenses.paid_by != 1
GROUP BY expenses.id
)
AS total;
问题是此查询全面检索所有费用。我想做的是限制使用:
WHERE user_expenses.user_id = 1
如何将其添加到上述查询(在子查询中)以将结果限制为仅与该用户关联的费用?
表模式(如果可能有帮助的话):
USERS
id
name
username
email
EXPENSES
id
created_at
updated_at
title
amount
group_id
paid_by
img_url
note
USER_EXPENSES (join table)
id
expense_id
user_id
GROUPS
id
created_at
name
desc
USER_GROUPS
id
user_id
group_id
更多示例信息以供澄清: 如果我运行这个查询 -
SELECT
e.title,
e.amount,
(e.amount/count(*)) AS owe, count(*) AS members
FROM expenses e LEFT JOIN
user_expenses ue
ON e.id = ue.expense_id
WHERE e.paid_by != 1
GROUP BY e.id;
如果我运行以下命令:
SELECT
e.title,
e.amount,
(e.amount/count(*)) AS owe, count(*) AS members
FROM expenses e LEFT JOIN
user_expenses ue
ON e.id = ue.expense_id AND ue.user_id = 1
WHERE e.paid_by != 1
GROUP BY e.id;
【问题讨论】:
-
在 user_expense.user_id 上设置条件时,我一直遇到的关键问题是我需要费用中的所有成员返回,以便我可以划分共享费用,如第 5 行所示:@ 987654331@ 希望这是有道理的!
标签: sql postgresql join subquery