Mysql多次左连接和总和无法正常工作

时间:2015-05-27 19:09:29

标签: mysql sum left-join

我是连接新手。 我想在mysql上获得债务和收入的总和。但我面临着一个问题。 问题是总和工作比平常更多。 这是查询

foo.main()

首先

如果我不写小组,那就给我第一行了。

这样做是否有效?

主要问题:

我有:

-2 row'uye'(用户)

-3行'gelir'(收入)

-1行'uye_gider'(债务)值为25

但是当我执行此查询时,gider的值为75。

由于'gelir.tutar',我认为其总和('uye_gider.tutar')工作了3次

我做错了什么?

Select uyeler.*,
sum(uye_gider.tutar) as gider,
sum(gelir.tutar) as gelir
from uyeler
LEFT JOIN gelir on gelir.uye=uyeler.id
LEFT JOIN uye_gider on uye_gider.uye=uyeler.id
group by uyeler.id

1 个答案:

答案 0 :(得分:1)

第一

分组,根据您选择的字段对数据集进行分组。如果你想要一个整个表的总和,你应该只想要一行,它不应该被任何东西分组。如果你想用一个值对你的总和进行分组,即。动物'表

| id | animal | food_eaten |
| 1  | dog    | 10         |
| 2  | cat    | 13         |
| 3  | dog    | 10         |


select animal, sum(food_eaten) as total_food_eaten from animals group by animal; 

会给你

| animal | total_food_eaten |
| dog    | 20               |
| cat    | 13               |

这就是群体如何运作。它会根据您选择的非唯一值字段对查询进行分区。所以,

 select sum(food_eaten) as total_food_eaten from animals;

会给你

 |total_food_eaten|
 | 33             |

第二

无论匹配如何,左连接都将返回所有左表值,并且将连接到具有匹配值的任何右连接表。我确信你有三个收入行与一个用户行相关联。当您执行左连接时,会生成三个匹配的左连接行。然后,当您将债务行加入这三行时,它可以与所有三行相关联,因为ID匹配。这就是给你一个三皮特的东西。我建议,如果你只是在寻找两者的总和,我建议拆分查询,因为收入和债务表希望在这些表中没有相互关联。

这是一个可以帮助你的答案。

Multiple select statements in Single query