我一直在玩这个似乎是几个小时,我无法得到我想要的结果。以下是我遇到问题的查询:
SELECT year.year, dstate,
(SELECT sum(amount) FROM gift
WHERE year.year = gift.year
AND gift.donorno = donor.donorno)
FROM donor, gift, year
WHERE year.year = gift.year
AND gift.donorno = donor.donorno;
这似乎是多余的。无论如何,我正在尝试按年显示每个州的捐赠总额(gift.amount)。
ex.
1999 GA 500 (donorno 1 from GA donated 200 and donorno 2 from GA donated 300)
1999 FL 400
2000 GA 600
2000 FL 500
...
澄清捐赠者可以来自同一州,但我试图将捐赠年份的该州的礼品金额计算在内。 任何建议表示赞赏。我觉得答案就在我面前。
答案 0 :(得分:0)
这是一个非常简单的连接&聚合问题。
SELECT y.year, d.state, SUM(g.amount) AS total
FROM gift AS g
INNER JOIN year AS y ON y.year=g.year
INNER JOIN donor AS d ON d.donorno=g.donorno
GROUP BY y.year, d.state
您不需要SELECT子句中的子查询以获取总金额。你可以通过分组来总结它。 (我认为GROUP BY
条款是您所缺少的。我建议您阅读它。)您所做的事情被称为相关子查询,它将会非常缓慢大数据集,因为它必须逐行计算而不是作为设置操作。
另外,请不要使用旧式逗号连接语法。而是使用如上所示的显式连接语法。它更清晰,有助于避免意外的笛卡尔产品。