为啥 MySQL SUM 查询只返回一行?
Posted
技术标签:
【中文标题】为啥 MySQL SUM 查询只返回一行?【英文标题】:Why is MySQL SUM query only returning one row?为什么 MySQL SUM 查询只返回一行? 【发布时间】:2018-10-27 05:34:04 【问题描述】:我正在尝试创建一个 mysql 查询来返回我的数据库中每个帐户的所有报表余额的总和。查询如下所示:
SELECT SUM(balance), handle FROM statement_versions
INNER JOIN statements ON statement_versions.statement_id = statements.id
INNER JOIN accounts ON statements.account_id = accounts.id;
当我这样做时,它只返回一行,其中包含一个总余额和一个帐户(ID 为 1 的帐户)。我想要的是返回所有帐户的总和报表余额。我将如何实现这一目标?
【问题讨论】:
【参考方案1】:您需要按某些内容进行分组,可能是handle
(我猜这与帐户ID有关?),否则MySQL将SUM
所有从您的JOIN
中选择的值。添加GROUP BY
子句会使SUM
发生在GROUP BY
中列的每个不同值上。将您的查询更改为:
SELECT SUM(balance), handle FROM statement_versions
INNER JOIN statements ON statement_versions.statement_id = statements.id
INNER JOIN accounts ON statements.account_id = accounts.id
GROUP BY handle;
如果handle
与accounts.id
无关,并且您希望获得按accounts.id
分组的结果,请将查询更改为:
SELECT SUM(balance), accounts.id FROM statement_versions
INNER JOIN statements ON statement_versions.statement_id = statements.id
INNER JOIN accounts ON statements.account_id = accounts.id
GROUP BY accounts.id;
【讨论】:
非常感谢!我实际上正在尝试弄清楚如何将其转换为 Laravel 查询构建器,但我想如果我得到正确的基础查询,我就可以这样做。我错了哈哈。 至少这应该是正确的底层查询! This 和 this 可能对 laravel 部分有所帮助。 谢谢。我收到一个错误Column not found: 1054 Unknown column 'statement_versions.balance' in 'field list' (SQL: select sum(
statement_versions.
balance) as aggregate from
accounts)
,所以我不确定发生了什么。似乎由于某种原因,连接结构不正确或其他原因。
@hoolakoola 这是来自你的 laravel 版本吗?你应该问另一个问题,以便一些 laravel 专家会看到它。以上是关于为啥 MySQL SUM 查询只返回一行?的主要内容,如果未能解决你的问题,请参考以下文章
当 GraphQL 查询只需要返回对象的某些字段时,为啥 MySQL/Sequelize 会执行全选查询?
mysql left join and not equals 应该只返回一行