当前位置: 首页 > 知识库问答 >
问题:

如何使用MySQL在一次查询中使用2个表数据并在2个表数据的基础上创建一个新列

沈华皓
2023-03-14

我有一个表包含人的详细信息,一个是货币的详细信息,一个是人的债务,还有一个是已付的债务。
我想做一个查询来显示剩余债务,比如,如果某人借了100美元和100,000伊拉克第纳尔,然后又借了250美元,过了一段时间他还了150美元和40,000伊拉克第纳尔,我想查询显示某人在两行中剩余债务,一行是200美元,另一行是60,000伊拉克第纳尔,因此剩余债务金额为sum of debt_amount-sum of paid_amount一种货币和另一种货币。

我可以为每个人做两种货币的求和,所以它将两个债务(100美元和250美元)显示为一个350美元,但造成问题的是,我不知道如何用MySQL实现基于债务和已付债务的剩余金额的计算。

获取所有债务查询:

SELECT 
    people.id, people.name, SUM(debt_people.amount) AS debt, debt_people.cur_id AS currency_id
FROM
    debt_people 
        INNER JOIN
    people  ON people.id = debt_people.people_id
GROUP BY debt_people.people_id , debt_people.cur_id;

正在获取所有已付款部门查询:

SELECT 
    people.id,
    people.name,
    SUM(payment_people.amount) AS Payment,
    payment_people.cur_id AS currency_id
FROM
    payment_people
        INNER JOIN
    people  ON people.id = payment_people.people_id
GROUP BY payment_people.people_id , payment_people.cur_id;

共有1个答案

滕项明
2023-03-14

我认为您希望在加入之前使用全部联合:

SELECT p.id, p.name, dp.cur_id,
       SUM(dp.debt) AS debt, SUM(dp.payment) as payment,
       SUM(dp.debt) - SUM(dp.payment) as remaining
FROM people p JOIN
     ((SELECT d.people_id, d.amount as debt, 0 as payment, d.cur_id
       FROM dept_people d
      ) UNION ALL
      (SELECT p.people_id, 0, p.amount as payment, p.cur_id
       FROM payment_people d
      )
     ) dp
     ON p.id = dp.people_id
GROUP BY p.id, p.name, dp.cur_id;
 类似资料:
  • 问题内容: 我需要在一个查询中计算两列中某些数据的出现总数。数据库位于SQL Server 2005中。 例如,我有此表: 我需要查询一个结果: 1.名为“约翰”的人数 2.年龄超过30岁的“约翰”的人数。 我可以通过这种方式对子查询进行操作(这只是示例): 但这非常慢,我正在寻找更快的方法。 与使用子查询相比,您是否知道一种更好的方法来计算一个查询中的少量计数? 问题答案: 使用CASE语句,您

  • 问题内容: 有什么方法可以简化为一个查询吗? 问题答案: 是的,您可以使用以下查询进行操作:

  • 问题内容: 我正在尝试创建一个新表,该表将包含三个现有表中的选定数据。 现有的三个表设置如下,我想要的结果在底部: 在此先感谢您的帮助! 问题答案: 您需要进行三向联接: 演示 或者,如果您已经创建了表,则可以执行以下操作: 要获得多个属性,您必须分别为每个属性将详细信息和分类表联接在一起:

  • 我有两个表:< code>person_concern和< code>person。它们都有一个< code >代码列,而< code>person有一个< code>dept列。我想从< code>person_concern表中选择数据,其中< code>person表中的< code>dept列= 30。 基本上,表的每一行都有不同的代码,然后将该人员放入一个部门。因此,我可以在表中使用相同

  • 问题内容: 是否可以在带有子选择的mysql 5.0上运行UPDATE命令。 我要运行的命令是这样的: ISBN13当前存储为字符串。 这应该更新10k +行。 谢谢, 威廉 问题答案: 只需更改一下即可:

  • 问题内容: 我想在MySQL中将数据从一个表复制到另一个表。 表1(现有表): 表2(新表) 我想将一些数据字段从表1复制到表2。 可以使用MySQL查询完成吗? 问题答案: 这将做您想要的: 如果要包括table1中的所有行。否则,如果只想添加table1的子集,则可以在末尾添加WHERE语句。 我希望这有帮助。