Mysql 联接表,并在每个表上预执行聚合
我有以下表格: 表零件清单:Mysql 联接表,并在每个表上预执行聚合,mysql,sql,Mysql,Sql,我有以下表格: 表零件清单: part_number | description | type 100 blablabla blabla 表零件清单供应商: part_id | artikel 100 100100 100 200100 我有一个疑问: select part_list.part_number, part_list.description, part_list.type, group_concat(coalesce(part
part_number | description | type
100 blablabla blabla
表零件清单供应商:
part_id | artikel
100 100100
100 200100
我有一个疑问:
select part_list.part_number, part_list.description, part_list.type, group_concat(coalesce(part_list_supplier.artikel, "nothing")) as "artikel"
from part_list
left join part_list_supplier on (part_list.part_number = part_list_supplier.part_id)
group by part_list.part_number;
结果是:
part_number | description | type | artikel
100 blablablabla blabla 100100,200100
但我想显示它背后每个零件的总库存量。表格收据:
Number | import
100 5
100 10
表销售:
Number | sold
100 5
这是我对一个表的查询:
SELECT SUM(sold) AS sold
FROM sales WHERE number = '".$partnumber.”'
但我想计算每个数字的库存,这必须显示在其他结果后面。
全部结果如下:
part_number | description | type | artikel | stock
100 blablablabla blabla 100100,200100 10
库存应该是10,因为进口的总数是15(5+10),销售的总数是5。我可能没有正确理解你的问题,但是你不能将
sum(sales.seld)
添加到select语句中并加入销售表吗?例如:
select part_list.part_number, part_list.description, part_list.type, group_concat(coalesce(part_list_supplier.artikel, "nothing")) as "artikel", sum(sales.sold)
from part_list
left join part_list_supplier on (part_list.part_number = part_list_supplier.part_id)
left join sales on (part_list.part_number = sales.number
group by part_list.part_number;
我把它分成几部分来解决它。我首先写了两个查询,一个计算总收入,另一个计算总销售额:
SELECT r.number, SUM(r.import) AS totalIn
FROM receipt r
GROUP BY r.number;
SELECT s.number, SUM(s.sold) AS totalOut
FROM sales s
GROUP BY s.number;
然后,我将其作为联接的两个子查询来获取股票:
SELECT r.number, totalIn - totalOut AS stock
FROM(
SELECT r.number, SUM(r.import) AS totalIn
FROM receipt r
GROUP BY r.number) r
JOIN(
SELECT s.number, SUM(s.sold) AS totalOut
FROM sales s
GROUP BY s.number) s ON s.number = r.number;
一旦我验证了这一点并给出了适当的库存,我就能够将这些子查询包含到您的原始查询中,以构建以下内容:
SELECT pl.part_number, pl.description, pl.type,
GROUP_CONCAT(COALESCE(pls.artikel, "Nothing.")) AS artikel,
r.totalIn - s.totalOut AS stock
FROM part_list pl
LEFT JOIN part_list_supplier pls ON pls.part_id = pl.part_number
JOIN(
SELECT number, SUM(import) AS totalIn
FROM receipt
GROUP BY number) r ON r.number = pl.part_number
JOIN(
SELECT number, SUM(sold) AS totalOut
FROM sales
GROUP BY number) s ON s.number = r.number
GROUP BY pl.part_number;
这里有一个例子