PostgreSQL 在连接两个表时会乘以列

问题描述 投票:0回答:1

我有两个与此示例类似的表格(为了清晰起见进行了简化):


家长:

| id   |  name     | amount    | year  |
----------------------------------------
| 101  |  Henry    | 300       | 2020  |
----------------------------------------
| 102  |  Carol    | 100       | 2020  |
----------------------------------------
| 103  |  Tom      | 900       | 2020  |
----------------------------------------

孩子:

| id   |  parent_id  | department    |
--------------------------------------
| 1    |  101        | finance       |
--------------------------------------
| 2    |  101        | hr            |
--------------------------------------
| 3    |  101        | it            |
--------------------------------------
| 4    |  102        | support       |
--------------------------------------

我试图连接两个表并通过以下脚本获取 amount 字段的总和值,但总和将是 1900 而不是 1300,因为记录 101 重复了 3 次:
select 
sum(p.amount),
count(c) 
from parent p
left join child c on c.parent_id = p.id 
where p.year = 2020

当我使用以下查询时,它可以工作,但它给出的子记录数量为 2 而不是 4,因为它根据父记录对子记录进行分组:

SELECT SUM(p.amount) 
FROM parent p
LEFT JOIN (
    SELECT parent_id 
    FROM child
    GROUP BY parent_id
) c ON c.parent_id = p.id
WHERE p.year = 2020;

那么,如何解决这个问题呢?

sql database postgresql join aggregate-functions
1个回答
0
投票

我使用以下方法并通过提供父表中金额的正确总和并计算子表中的金额来解决问题:

SELECT
    (SELECT SUM(amount) FROM parent WHERE year = 2020),
    COUNT(c) 
FROM child c;

如果有任何改进此答案的建议,请随时分享您的建议。

© www.soinside.com 2019 - 2024. All rights reserved.