我一直在玩这个游戏长达数小时之久,却无法获得想要的结果。这是我遇到问题的查询:

    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
...


为了澄清捐赠者可以来自同一州,但我正在尝试总计该州在捐赠当年的捐赠金额。
任何建议表示赞赏。我觉得答案就在我眼前。

这是供参考的表格图片:
mysql - MySQL按状态按年总计-LMLPHP

最佳答案

这是一个非常简单的联接和聚合问题。

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子句是您所缺少的。我建议您继续阅读。)您所做的被称为相关子查询,由于它具有逐行计算,而不是按设置操作进行计算。

另外,请不要使用旧的逗号联接语法。而是使用上面显示的显式连接语法。它更加清晰,将有助于避免意外的笛卡尔积。

关于mysql - MySQL按状态按年总计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32752697/

10-10 19:23