我有两个与此示例类似的表格(为了清晰起见进行了简化):
家长:
| 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 |
--------------------------------------
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;
那么,如何解决这个问题呢?
我使用以下方法并通过提供父表中金额的正确总和并计算子表中的金额来解决问题:
SELECT
(SELECT SUM(amount) FROM parent WHERE year = 2020),
COUNT(c)
FROM child c;
如果有任何改进此答案的建议,请随时分享您的建议。