mysql - 使用内部连接在 SQL 中计算

标签 mysql sql

我正在尝试在 SQL 语句中进行计算。我正在尝试计算每个客户 invoice.total 列中的总金额。我创建了以下语句:

SELECT customers.firstname, customers.lastname, customers.status, SUM(invoice.total) AS total 
FROM customers
INNER JOIN invoice
ON customers.id=invoice.id;

当我运行它时,我得到了表中的总金额。我在这张表中有 15 个不同的客户,但我只得到第一个客户的名字和所有客户的总金额。我做错了什么?

最佳答案

首先,当您想要获得聚合结果时,您需要对数据进行分组:

SELECT customers.firstname, customers.lastname, customers.status, SUM(invoice.total) AS total 
FROM customers
INNER JOIN invoice
    ON customers.id=invoice.id
GROUP BY customers.firstname, customers.lastname, customers.status;

其次,您确定您是通过正确的字段加入表格吗? invoice.id 列是否正确?我希望 invoice.id 成为表的主键,而我希望另一列用于外键,例如 invoice.customerid。请仔细检查它是否正确。

更新:正如评论中提到的,如果您有两个具有相同名字、姓氏和状态的客户,数据将被错误分组。在这种情况下,您需要将唯一字段(例如 customers.id)添加到 SELECTGROUP BY 语句。

关于mysql - 使用内部连接在 SQL 中计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679684/

相关文章:

mysql union 在重复的情况下优先记录来自选择查询之一的记录

mysql : Not allowed to return a result set from a function

php - 如何为搜索查询设置配额并避免分页占用配额

php - 使用 PHP PDO 准备语句时在 SQL 查询中使用 LEAST

mysql - 建立设备数据库。将所有设备属性放在一张表中还是放在许多单独的表中更好?

mysql - Laravel 按特定列排序等于 id

MySQL "in"命令

sql - Oracle SQL - 用以前的已知值替换空值

SQL Agent 显示 "SQL Agent XPs Disabled"但它们不是

java - 多对多查询 查找所有含有 XX 成分的 "recipes"