【问题标题】:Calculating sum based on CustomerID根据 CustomerID 计算总和
【发布时间】:2014-10-27 12:07:44
【问题描述】:

好的,我正在尝试帮助我的朋友解决问题。

该问题要求计算每个客户的欠款金额,并显示 TotalAmount、CustomerName 和 CustomerID。

我们试过这个:

SELECT SUM(balance) AS totalBalance, customerName, customerID
FROM invoices;

这似乎很简单,但恐怕这不会给每个客户一个唯一的总和,而且我要到明天才能测试这些,因为我目前无法访问数据库程序。

【问题讨论】:

  • 您缺少group by
  • 好的,谢谢。我很感激,我只是主动提出帮助她,这样我就可以重新开始练习,这就是我决定在这里问的原因。
  • 您应该了解 SQL Fiddle,以便您可以在 Web 上练习 SQL 查询。
  • @gordonlinoff 提出了 SQL Fiddle。 OP,如果您愿意,这是您在 SQL Fiddle 中查询的示例。
  • 哇,那个 sql fiddle 真是太棒了。我不知道它存在。谢谢你!另外,既然我知道我的计算机上没有数据库程序,我会优先考虑明天获得一个,因为它们对学生免费。

标签: mysql sql database


【解决方案1】:

如果你想对一个值求和,你需要创建一个组。否则,MySQL 怎么知道要对哪些值求和?我假设在这种情况下您将按 customerID 分组,但这只是假设。

试试这个:

SELECT customerID, customerName, SUM(balance)
FROM invoices
GROUP BY customerID;

编辑 上述查询假定您的 customerID 是唯一的,并且足以按此进行分组。如果它不是唯一的,最好按 customerID 和名称进行分组,如下所示:

GROUP BY customerID, customerName;

【讨论】:

  • 应该是GROUP BY customerID, customerName
  • 谢谢,我一定会在早上的第一件事上测试它,当我可以使用数据库时。
  • 查看 SQL Fiddle - 查看我对您问题的评论。
  • 抱歉,我没有意识到 MySQL 可以允许您在选择列表中包含未在 GROUP BY 子句中命名的非聚合列 - 您的查询很好!
  • @Trent,没什么大不了的。我认为相反的情况是不正确的。如果在 group by 中,则必须在 select 中。但是,它可以在 select 中,但不必在 group by 中。