加入 3 Table 总和组 MySQL PHP

Join 3 Table Sum Group By MySQL PHP

我正在使用 Codeigniter,我想求和(stock_in)和求和(stock_out)并按 id_barang:

分组

Table 股票

代码 姓名 现货
B01 图书 40

Table 库存在

代码 姓名 进货
B01 图书 20
B01 图书 10

Table 缺货

代码 姓名 缺货
B01 图书 5
B01 图书 10

我要结果: 摘要

代码 姓名 现货 进货 缺货 最后库存
B01 图书 40 30 15 55

最后库存 = (库存 + 进货) - 缺货

我可以加入 3 个 table,但是 sum(stock_in) 和 sum(stock_out) 是这样的:

代码 姓名 现货 进货 缺货 最后库存
B01 图书 40 60 30 70

根据您想要的输出,此处使用 INNER JOIN。但是如果 stock_in 和 Stock_out table 中不存在代码 (B01),则使用 LEFT JOIN 而不是 INNER JOIN。金额字段使用COALESCE函数忽略NULL。

-- MySQL
SELECT s.code, s.name, s.stock, si.stock_in, so.stock_out
     , (s.stock + si.stock_in - so.stock_out) last_stock
FROM Stock s
INNER JOIN (SELECT code, MAX(name) name
                 , SUM(stock_in) stock_in
            FROM Stock_in
            GROUP BY code) si
        ON s.code = si.code
INNER JOIN (SELECT code, MAX(name) name
                 , SUM(stock_out) stock_out
            FROM Stock_out             
            GROUP BY code) so
            ON s.code = so.code;

请检查 url http://sqlfiddle.com/#!9/6dc765/4

的结果

请检查使用左连接的结果http://sqlfiddle.com/#!9/9e97ef3/2

这是一种方法(使用 RahulBiswas 精心提供的 fiddle)...

SELECT s.code   
     , s.name
     , s.stock
     , SUM(CASE WHEN direction = 'in' THEN qty END) stock_in
     , SUM(CASE WHEN direction = 'out' THEN qty END) stock_out
     , s.stock+SUM(CASE WHEN direction = 'in' THEN qty END)-SUM(CASE WHEN direction = 'out' THEN qty END) balance
  FROM stock s
  JOIN 
     ( SELECT code
            , name
            , stock_in qty
            , 'in' direction
         FROM stock_in
        UNION ALL
       SELECT code
            , name
            , stock_out 
            , 'out' 
         FROM stock_out
    ) x
   ON x.code = s.code;
   

http://sqlfiddle.com/#!9/6dc765/10