内连接不正确的总和()

时间:2016-03-23 16:36:56

标签: mysql sql inner-join

表1 - jos_addRabotyAndProstoyMain

| id      | Marka    | OtrabotanoMachine_hours|
| 8       | 90979    | 6                      |
| 9       | 90979    | 11                     |
| 10      | 90979    | 11                     |
| 11      | 90979    | 11                     |
| 12      | 90979    | 11                     |

表2 - jos_addRabotyAndProstoySecond

| id      | Hours    | id_fk|
| 13      | 2        | 8    |
| 14      | 2        | 9    |
| 15      | 3        | 9    |
| 16      | 3        | 9    |
| 17      | 4        | 10   |
| 18      | 2        | 10   |
| 19      | 2        | 11   |
| 20      | 3        | 12   |

我的内部联接查询:

 SELECT avto.Marka AS Marka,sum(main.OtrabotanoMachine_hours) as 'work hours', SUM(sec.Hours) as downtime
FROM
jos_addRabotyAndProstoyMain main
INNER JOIN avto ON main.Marka=avto.ID_Avto
INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id 
GROUP BY avto.Marka

我得到以下结果:

  | Marka    | work hours    | downtime|
  | Liebherr | 83            | 21      |

如您所见,“工作时间”列中的总和不正确(83而不是50),因为主表中的主键在次表中符合1-3个外键。 我想,排在什么位置 INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id 需要一些过滤器。我不知道如何解决它,请帮忙。 我想要结果如:

  | Marka    | work hours    | downtime|
  | Liebherr | 50            | 21      |

1 个答案:

答案 0 :(得分:2)

您可以通过jos_addRabotyAndProstoySecond字段聚合id_fk表来修复您的查询。 JOINjos_addRabotyAndProstoySecond之间的jos_addRabotyAndProstoyMain操作转换为1-1连接,并删除重复项:

SELECT avto.Marka AS Marka,
        sum(main.OtrabotanoMachine_hours) as 'work hours', 
         SUM(sec.Hours) as downtime
FROM jos_addRabotyAndProstoyMain main
INNER JOIN avto ON main.Marka=avto.ID_Avto
INNER JOIN (
   SELECT id_fk, SUM(Hours) AS Hours
   FROM jos_addRabotyAndProstoySecond 
   GROUP BY id_fk) sec ON sec.id_fk = main.id 
GROUP BY avto.Marka
相关问题