从多个表中获取数量总和?

时间:2018-08-05 13:40:22

标签: sql

我至少有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没用,或者我错了。

2 个答案:

答案 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 allgroup 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之前进行汇总,但这不是必需的。