来自基于ID组的2个不同表的SUM,来自第三个表的返回值比预期值大两倍

问题描述 投票:1回答:1

我有下表

1。物料单位:

id | material_unit
1  | Nos.
2  | lts

2。物料表:

id | Material_name
1  | bricks
2  | Cement

3。 Grn表:

id | material_id | qty | unit
1  | 1           | 100 |   1
2  | 2           | 500 |   1
3  | 2           | 100 |   1
4  | 1           | 200 |   1

4。消费表:

id | material_id | qty | unit
1  | 1           | 50  |   1
2  | 1           | 50  |   1
3  | 2           | 100 |   1
4  | 2           | 200 |   1

预期结果如下:

Material Name | Unit | Total Qty | Total Consumed Qty | Stock
Bricks        | Nos. | 300       | 100                | 50
Cement        | Nos. | 600       | 300                | 300

因此,在上述结果中,将从Grn表中获取总数量,从消耗表中获取总消费数量,库存是两者的差,应按Material_id分组。

下面的查询从GRN和消耗表中返回值的总和,但它与消耗表中条目数的乘积之和。

我在做什么错误,请有人帮我弄清楚我的错误。

SELECT sm.material_name as 'Material Name', mu.material_unit as 'Material Unit', sum(g.qty) as 'GRN Qty', sum(c.qty) as 'Consumed Qty', SUM(g.qty) - SUM(c.qty) as 'Stock' from grn g 
JOIN material_table sm ON g.material_id = sm.id
JOIN material_unit_table mu ON g.unit_id = mu.id
JOIN consumption c ON c.material_id = g.material_id

group by g.material_id

mysql sql group-by sum distinct-values
1个回答
0
投票

我认为您的问题是由于grn表是您的原始表,所以选择为该表中的每一行获取了一行。将material_table用作您的第一个表,并使用其ID将其余的表与此表联接。

请尝试这个版本,让我知道它是否正常工作(考虑到它可能包含错误,我已经将它写到了记事本中)

SELECT sm.material_name as 'Material Name', mu.material_unit as 'Material Unit', sum(g.qty) as 'GRN Qty', sum(c.qty) as 'Consumed Qty', SUM(g.qty) - SUM(c.qty) as 'Stock' 
FROM material_table sm 
JOIN grn g ON g.material_id = sm.id
JOIN material_unit_table mu ON g.unit_id = mu.id
JOIN consumption c ON c.material_id = sm.material_id
GROUP BY by sm.material_id

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.