MySQL按州分列总计

时间:2015-09-24 03:13:27

标签: mysql sql

我一直在玩这个似乎是几个小时,我无法得到我想要的结果。以下是我遇到问题的查询:

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

澄清捐赠者可以来自同一州,但我试图将捐赠年份的该州的礼品金额计算在内。 任何建议表示赞赏。我觉得答案就在我面前。

以下是参考表格的图片: table diagram

1 个答案:

答案 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条款是您所缺少的。我建议您阅读它。)您所做的事情被称为相关子查询,它将会非常缓慢大数据集,因为它必须逐行计算而不是作为设置操作。

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