mysql - 将 Sum 与 select join 和 union 结合起来

标签 mysql select join sum union

我需要像这样加入 2 个查询

SELECT * from contracts join customers on customer.id=contracts.customer

并且(12234 是示例客户)

SELECT *,sum(cast(amount as UNSIGNED)) as total FROM(    
SELECT * from invoices
where customer='123456'
UNION
SELECT * from paypal_invoices
where customer='123456') t1

在第一个查询中,我只是根据我们拥有的事件契约(Contract)提取正常的客户列表。

在第二个中,我提取特定客户的任何发票的总和

所以我基本上需要像第一个查询一样提取所有客户,但我还需要一列包含该特定客户的所有发票的总和。 谢谢。

最佳答案

一种方法是相关子查询或左连接:

select co.*, cu.*, i.amount, pi.amount as paypal_amount,
       ( coalesce(i.amount, 0) + coalesce(pi.amount, 0) ) as total       
from contracts co join
     customers cu
     on cu.id = co.customer left join
     (select customer, sum(amount) as amount
      from invoices
      group by customer
     ) i
     on i.customer = cu.id left join
     (select customer, sum(amount) as amount
      from paypal_invoices
      group by customer
     ) pi
     on pi.customer = cu.id;

这里有两个关键想法。首先,请确保在进行连接之前进行聚合。这可以防止连接使行数成倍增加并生成不正确的结果。同样,这使用LEFT JOIN来确保包含所有客户,即使是那些没有发票的客户。

第二个想法:不要使用UNION。事实上,您的查询可能不正确。 UNION 删除重复项——表内和表之间的重复项。使用UNION ALL 更安全。或者,在这种情况下,根本不需要它。

关于mysql - 将 Sum 与 select join 和 union 结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45754968/

相关文章:

php - 当尝试传递包含在数据中的“符号”时,MySQL 语法出错

mysql - 仅在一个表中、仅在第二个表中以及在两个表中的条目的百分比

sql - 单个查询中的 Postgresql 多个连接,其中连接的外键不存在于所有表中

java - spring中通过Service访问Join Tables的元素

mysql - 加入前 3 个兴趣领域以及每个用户行

mysql - 双向同步mysql数据库

mysql 仅将字符串的第一个数字部分与 int 列进行比较

arrays - 如何在换行符分隔的列表中使用 bash 的选择?

mysql - 根据不同表中另一列的最大值选择唯一列

mysql - 将 2 个表连接在一起并使用基于单独 mysql 查询的 where 函数