【问题标题】:Substract several values from one table to another value in a different table将一个表中的多个值减去另一个表中的另一个值
【发布时间】:2019-11-07 15:40:39
【问题描述】:

您好,我正在尝试在表格发票中添加一个名为利润的列。我想准确地获得红色的值。该值是表 invoice amountUsd 列减去表 carrierPayments amountUsd 列的减法,使用列 loadNumber 作为 ID。如果我使用以下查询为每张发票有一个 carrierPayments,它就可以工作。

SELECT i.*, i.amountUsd - cp.amountUsd AS PROFIT FROM invoice i INNER JOIN carriersPayments cp ON i.loadNumber = cp.loadNumber

但是,如果我有多个具有相同 loadNumber 的运营商付款方式与橙色背景的运营商付款方式相同,该怎么办。是否可以在一张发票上减去多个运营商付款?

【问题讨论】:

  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);标签和明确的规范和解释。给出输入表的表格初始化代码。请合理地格式化您的代码。 PS 即使您不知道如何进一步查询它们并将它们组合到您的整体答案中,您也可以编写哪些与获得总体答案相关的查询?请参阅 How to Ask、其他 help center 链接和投票箭头鼠标悬停文本。
  • use text, not images/links, for text--including tables & ERDs. 转述或引用其他文本。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图像中包含图例/键和说明。让您的帖子自成一体。
  • 您说“在一张发票上减去多个运营商付款”--所以您似乎想减去每次装载的付款的 SUM()。
  • 好的,感谢您的建议。所以最后我找到了我要找的东西。 SELECT i.id, i.loadNumber, i.amountUsd - SUM(cp.amountUsd) AS PROFIT FROM invoice i INNER JOIN carriersPayments cp ON i.loadNumber = cp.loadNumber GROUP BY i.id, i.loadNumber, i.amountUsd
  • 如果这不是已发布的答案之一,请考虑将其发布为其他人查找的答案。您可以接受它(经过最少的等待)或另一个最有帮助的。评论是短暂的,帖子是永久的。 PS Column id 在您的评论中,但不在您的问题中。

标签: mysql sql select inner-join


【解决方案1】:

您可以使用joingroup by

select i.*,
       (i.amountUSD - coalesce(p.amountUSD, 0)) as profit
from invoice i left join
     (select p.loadNumber, sum(p.amountUSD) as amountUSD
      from carrierPayments p
      group by p.loadNumber
     ) p
     on p.loadNumber = i.loadNumber;

【讨论】:

    【解决方案2】:
    SELECT i.*, i.amountUsd - sum(cp.amountUsd) AS PROFIT FROM invoice i INNER JOIN carriersPayments cp ON i.loadNumber = cp.loadNumber group by cp.loadNumber
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 2010-11-15
      • 1970-01-01
      • 2013-11-29
      • 2018-03-23
      相关资源
      最近更新 更多