mysql - 内部连接不正确的总和()

标签 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      |

最佳答案

您可以通过按 id_fk 字段聚合 jos_addRabotyAndProstoySecond 表来修复您的查询。 jos_addRabotyAndProstoySecondjos_addRabotyAndProstoyMain 之间的 JOIN 操作被转换为 1-1 join 并消除了重复项:

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

关于mysql - 内部连接不正确的总和(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36183823/

相关文章:

mysql - 使用任何 sqoop 命令时出现 Sqoop 错误

MySQL 存储过程返回错误值

php - MySQL连接查询的澄清

sql - 通过一个查询从 3 个表中删除

linq - 如何使用 Linq 和 Entity Framework 连接两个可连接对象?

mysql - 从一种方法调用另一种方法

java - 在mysql数据库中创建表

performance - 简单的 MySQL 查询需要很长时间

java - 如何从非主键表的 hibernate 列表中选择数据,其中所有列的where子句数据都相同

sql - Oracle中的 "NUMBER"和 "NUMBER(*,0)"是否相同?