左连接和求和

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。