简体   繁体   English

内连接不正确的总和()

[英]inner join incorrect sum()

table 1 - jos_addRabotyAndProstoyMain 表1 - jos_addRabotyAndProstoyMain

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

table 2 - jos_addRabotyAndProstoySecond 表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   |

My inner join query: 我的内部联接查询:

 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

I get the following result: 我得到以下结果:

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

As you can see, sum in column 'work hours' incorrect(83 instead 50), because for primary key in the main table complies 1-3 foreign keys in the secondary table. 如您所见,“工作时间”列中的总和不正确(83而不是50),因为主表中的主键在次表中符合1-3个外键。 I think, what in row INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id need some filter.I am no idea how to solve it, please help. 我想,行内INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id需要一些过滤器。我不知道如何解决它,请帮忙。 I want result such as: 我想要的结果如:

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

You can fix your query by aggregating jos_addRabotyAndProstoySecond table by id_fk field. 您可以通过id_fk字段聚合jos_addRabotyAndProstoySecond表来修复查询。 The JOIN operation between jos_addRabotyAndProstoySecond and jos_addRabotyAndProstoyMain is transformed into an 1-1 join and duplicates are eliminated: jos_addRabotyAndProstoySecondjos_addRabotyAndProstoyMain之间的JOIN操作转换为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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM