左连接和求和
Left Join and Sum
我有两张表,一张列出了 grants/loans,一张列出了个人支出。他们共享一个 ID 列,因为每笔支出都分配给特定的赠款或贷款。我正在尝试使用 LEFT JOIN 来汇总所有贷款的支出,但不包括赠款。
这是我所在的位置:
SELECT SUM(expenses.total_amt) AS total
FROM expenses WHERE loans_grants.grant_loan_type = 'Loan'
LEFT JOIN loans_grants
ON expenses.grant_loan_id = loans_grants.internal_id;
非常感谢任何提示!
编辑:谢谢大家,对于半生不熟的问题表示歉意,已经很晚了,我在杂草丛中。
基本结构如下:
费用:
expenses table structure
loans_grants:
loans_grants table structure
我已经根据@jwood74 对此的回答更新了代码:
SELECT l.internal_id, SUM(e.total_amt) amount
FROM loans_grants l
LEFT JOIN expenses e ON e.grant_loan_id = l.internal_id
WHERE grant_loan_type = 'Loan'
group by l.internal_id
产生这个:
内部 ID
数量
1
3234
4
无
5
7625
7
无
9
无
请原谅我的新手,但我正在尝试汇总所有贷款费用,所以我想 return 3234 + 7625,而不是分别汇总每笔贷款的费用。感谢您的帮助!
在不知道两个表的具体格式的情况下,有点吃力。但这是一般的想法-
select
l.id,
sum(e.amount) amount
from loans_grants l
left join expenses e on e.grant_loan_id = l.internal_id
where grant_loan_type = 'Loan'
group by l.id
如果您要查找返回的单行,则不需要按任何内容进行分组...只需对您要查找的内容进行 SUM()。
其次,不要 post 样本数据和 table 结构的图片。编辑原始 post 并输入值,即使您 copy/paste 数据并将其格式化以提高可读性(通过 Ctrl+K,或 post 上方的大括号 {} 图标编辑 header面积)。
在这种情况下,您的 tables
Loan_Grants table
Internal_id grant_loan_type
1 Loan
2 Grant
3 Grant
4 Loan
5 Loan
6 Grant
7 Loan
8 Grant
9 Loan
Expenses Table
total_amt grant_loan_id
2000 1
245 5
4500 5
2200 5
445 5
185 5
1234 1
50 5
从您的 Loan_Grants table 开始,只过滤您的 'Loan' 条记录
select
sum( e.total_amt ) totalExpenses
from
loan_grants lg
JOIN expenses e
on lg.internal_id = e.grant_loan_id
where
lg.grant_loan_type = 'Loan'
除非您明确希望查看所有“贷款”条目,否则您不需要 left-join,即使它们尚未记录费用。通过进行常规(内部)JOIN,这意味着必须在费用 table 中有记录。再次,根据您的需要。如果您有 10,000 笔贷款,而只有 247 笔贷款有费用,您是想查看全部 10,000 笔还是仅查看 247 笔以及它们的总数。由于您要汇总到单个 return 记录,因此 JOIN 是您的最佳选择。
为了将来,始终尝试将 table.column 或 alias.column 应用到您的所有字段,这样任何提供帮助的人都不必猜测该列来自哪个 table。
我有两张表,一张列出了 grants/loans,一张列出了个人支出。他们共享一个 ID 列,因为每笔支出都分配给特定的赠款或贷款。我正在尝试使用 LEFT JOIN 来汇总所有贷款的支出,但不包括赠款。
这是我所在的位置:
SELECT SUM(expenses.total_amt) AS total
FROM expenses WHERE loans_grants.grant_loan_type = 'Loan'
LEFT JOIN loans_grants
ON expenses.grant_loan_id = loans_grants.internal_id;
非常感谢任何提示!
编辑:谢谢大家,对于半生不熟的问题表示歉意,已经很晚了,我在杂草丛中。
基本结构如下:
费用: expenses table structure
loans_grants: loans_grants table structure
我已经根据@jwood74 对此的回答更新了代码:
SELECT l.internal_id, SUM(e.total_amt) amount
FROM loans_grants l
LEFT JOIN expenses e ON e.grant_loan_id = l.internal_id
WHERE grant_loan_type = 'Loan'
group by l.internal_id
产生这个:
内部 ID | 数量 |
---|---|
1 | 3234 |
4 | 无 |
5 | 7625 |
7 | 无 |
9 | 无 |
请原谅我的新手,但我正在尝试汇总所有贷款费用,所以我想 return 3234 + 7625,而不是分别汇总每笔贷款的费用。感谢您的帮助!
在不知道两个表的具体格式的情况下,有点吃力。但这是一般的想法-
select
l.id,
sum(e.amount) amount
from loans_grants l
left join expenses e on e.grant_loan_id = l.internal_id
where grant_loan_type = 'Loan'
group by l.id
如果您要查找返回的单行,则不需要按任何内容进行分组...只需对您要查找的内容进行 SUM()。
其次,不要 post 样本数据和 table 结构的图片。编辑原始 post 并输入值,即使您 copy/paste 数据并将其格式化以提高可读性(通过 Ctrl+K,或 post 上方的大括号 {} 图标编辑 header面积)。
在这种情况下,您的 tables
Loan_Grants table
Internal_id grant_loan_type
1 Loan
2 Grant
3 Grant
4 Loan
5 Loan
6 Grant
7 Loan
8 Grant
9 Loan
Expenses Table
total_amt grant_loan_id
2000 1
245 5
4500 5
2200 5
445 5
185 5
1234 1
50 5
从您的 Loan_Grants table 开始,只过滤您的 'Loan' 条记录
select
sum( e.total_amt ) totalExpenses
from
loan_grants lg
JOIN expenses e
on lg.internal_id = e.grant_loan_id
where
lg.grant_loan_type = 'Loan'
除非您明确希望查看所有“贷款”条目,否则您不需要 left-join,即使它们尚未记录费用。通过进行常规(内部)JOIN,这意味着必须在费用 table 中有记录。再次,根据您的需要。如果您有 10,000 笔贷款,而只有 247 笔贷款有费用,您是想查看全部 10,000 笔还是仅查看 247 笔以及它们的总数。由于您要汇总到单个 return 记录,因此 JOIN 是您的最佳选择。
为了将来,始终尝试将 table.column 或 alias.column 应用到您的所有字段,这样任何提供帮助的人都不必猜测该列来自哪个 table。