我至少有8个表,我需要从这些表中匹配客户名称并获取数量,并获取从这8个表中获取的所有数量的总和。我正在尝试编写一个代码,该代码将忽略数量总和为零的客户。
举个例子,让两个表purchase_sugar和sales_sugar我已经尝试了很多查询,但是只有一个查询返回错误的结果。
SELECT sum(purchase_sugar.qty + sales_sugar.qty) AS Total_Amount from purchase_sugar inner join sales_sugar on purchase_sugar.supplier = sales_sugar.customer WHERE purchase_sugar.supplier = "+str(x.id)+"
表结构类似于: purchase_sugar具有供应商和数量两列。 并且sales_sugar具有客户和数量之类的结构。
如果我提供一个名称并在这些表中进行搜索并获得数量,那么如何获得这些表的数量总和。另一件事是我不希望在所有表中都找到该客户。如果在一张表中找到它,我们应该从那张表中获取数量,因此,我认为JOIN没用,或者我错了。
答案 0 :(得分:1)
您应该加入总和而不是加入总和
select t1.purchase_sum + sales_sum as Total_Amount
from (
select purchase_sugar.supplier, sum(purchase_sugar.qty) as purchase_sum
from purchase_sugar
group by purchase_sugar.supplier
) t1
inner join (
select sales_sugar.customer, sum(sales_sugar.qty) as sales_sum
from sales_sugar
group by sales_sugar.customer
) t2 on t1.supplier = t2.customer and t1.supplier = "+str(x.id)+"
答案 1 :(得分:1)
要解决供应商/客户不在所有表中的情况,可以使用union all
和group by
:
select name, sum(p_qty) as sum_p, sum(s_qty) as sum_s,
sum(p_qty) + sum(s_qty)
from ((select ps.supplier as name, ps.qty as p_qty, 0 as s_qty
from purchase_sugar ps
) union all
(select ss.customer as name, 0, ss.qty
from sales_sugar ss
)
) s
group by name;
注意:
where
子句将结果限制为一个name
。union all
之前进行汇总,但这不是必需的。