我是连接新手。 我想在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
答案 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匹配。这就是给你一个三皮特的东西。我建议,如果你只是在寻找两者的总和,我建议拆分查询,因为收入和债务表希望在这些表中没有相互关联。
这是一个可以帮助你的答案。