Sql 从多个表中获取数量之和?
我至少有8个表,我需要从中匹配客户名称,获取数量,并获取从这8个表中获取的所有数量的总和。我正在尝试编写一个代码,它将忽略数量之和为零的客户 例如,让我们以两个表purchase\u sugar和sales\u sugar为例,我尝试了很多查询,但只有这一个返回了一些错误的结果Sql 从多个表中获取数量之和?,sql,Sql,我至少有8个表,我需要从中匹配客户名称,获取数量,并获取从这8个表中获取的所有数量的总和。我正在尝试编写一个代码,它将忽略数量之和为零的客户 例如,让我们以两个表purchase\u sugar和sales\u sugar为例,我尝试了很多查询,但只有这一个返回了一些错误的结果 SELECT sum(purchase_sugar.qty + sales_sugar.qty) AS Total_Amount from purchase_sugar inner join sales_sugar on
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\u sugar有两列:供应商和数量。
销售人员具有客户和数量等结构
如果我提供一个名称并在这些表中搜索并获得数量,如何获得这些表的数量之和。另一件事是,我不希望在所有的表格中都能找到客户。如果在一个表中找到,我们应该只从该表中获取数量,因此我认为JOIN没有用处,或者可能是我错了。您应该加入sum,而不是对JOIN求和
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)+"
要解决供应商/客户不在所有表中的情况,可以使用
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
- 如果您只想得到总数,则不必将数量拆分为两列(或八列)
- 您可以在
之前进行聚合,但这不是必需的联合all