MySQL连接和总和成倍增加

MySQL连接和总和成倍增加

我有一张收入表

title_id     revenue    cost
   1            10        5
   2            10        5
   3            10        5
   4            10        5
   1            20        6
   2            20        6
   3            20        6
   4            20        6

当我执行此查询
SELECT SUM(revenue),SUM(cost)
FROM revenue
GROUP BY revenue.title_id

它产生结果
title_id     revenue    cost
   1            30        11
   2            30        11
   3            30        11
   4            30        11

没关系,现在我想将求和结果与另一个具有这种结构的表合并
title_id     interest
   1            10
   2            10
   3            10
   4            10
   1            20
   2            20
   3            20
   4            20

当我执行这样的聚合函数加入时
SELECT SUM(revenue),SUM(cost),SUM(interest)
FROM revenue
LEFT JOIN fund ON revenue.title_id = fund.title_id
GROUP BY revenue.title_id,fund.title_id

结果翻倍
title_id     revenue    cost    interest
   1            60        22       60
   2            60        22       60
   3            60        22       60
   4            60        22       60

我不明白为什么加倍,请帮忙

最佳答案

它翻倍,因为您在基金和收入表中重复了标题。这会将它匹配的记录数相乘。如果删除聚合函数并查看原始数据,这很容易看到。 See here

解决此问题的方法是创建聚合的内联 View ,并加入这些结果。

SELECT R.title_id,
       R.revenue,
       R.cost,
       F.interest
FROM   (SELECT title_id,
               Sum(revenue) revenue,
               Sum(cost)    cost
        FROM   revenue
        GROUP  BY revenue.title_id) r
       LEFT JOIN (SELECT title_id,
                         Sum(interest) interest
                  FROM   fund
                  GROUP  BY title_id) f
              ON r.title_id = F.title_id

输出

| TITLE_ID | REVENUE | COST | INTEREST |
----------------------------------------
|        1 |      30 |   11 |       30 |
|        2 |      30 |   11 |       30 |
|        3 |      30 |   11 |       30 |
|        4 |      30 |   11 |       30 |

demo

关于MySQL连接和总和成倍增加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11364162/

10-14 15:22