【问题标题】:SQL SUM amouts by distinct bill's numbersSQL SUM 金额按不同的账单号码
【发布时间】:2014-11-30 15:26:15
【问题描述】:

我有这个问题:

SELECT companys.name as pav, SUM(distinct bills.amout) - SUM(cheques.amount)AS 
amount FROM companys INNER JOIN bills ON companys.id   = bills.company LEFT  JOIN 
cheques ON bills.bill_nr = cheques.bill_nr GROUP BY companys.name

例如,如果我有 2 张金额为(1000 和 1000)的钞票,第一张钞票(100 和 200)和第二张钞票(800)两张支票,我得到的结果是 -100 而不是 900。发生这种情况是因为它因为它们是相同的,所以只计算一次账单金额 1000,但我需要将它们与不同的 bills.bill.nr 相加。怎么做?谢谢!

【问题讨论】:

    标签: sql sum distinct


    【解决方案1】:

    您的问题是支票与账单金额相乘。一个好的解决方案是聚合所有之前加入,所以数字都是正确的:

    SELECT c.name as pav, (bamount - COALESCE(chamount, 0)) AS amount
    FROM companys c INNER JOIN
         (SELECT b.company, SUM(b.amount) as bamount
          FROM bills b
          GROUP BY b.company
         ) b
         ON c.id = b.company LEFT JOIN
         (SELECT b.company, SUM(ch.amount) as chamount
          FROM bills b JOIN
               cheques ch
               ON b.bill_nr = ch.bill_nr
          GROUP BY b.company
         ) ch
         ON c.id = ch.company;
    

    请注意,我添加了 COALESCE(),因此缺少检查不会导致 NULL 值。

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 2016-02-06
      • 2015-02-04
      • 1970-01-01
      • 2021-11-02
      • 2011-04-29
      • 2017-07-17
      • 1970-01-01
      • 2016-03-17
      相关资源
      最近更新 更多