MySQL:收集相关值的总和

时间:2016-04-07 16:07:08

标签: mysql sql

我在database中有三个表:

表:文章

id | code | name          | quantity | stock_date
--------------------------------------------------
1   1dfod   Article name    10        2016-04-01

表:销售

id | client_id | selling_type_id | selling_date | selling_status
----------------------------------------------------------------
1    1           1                 2016-04-02     1
2    1           1                 2016-04-03     1
3    1           1                 2016-04-04     1

表:selling_detail

id | selling_id | article_id | quantity
-------------------------------------
1    1            1            2
2    1            1            3
3    1            1            1
4    2            1            3
5    3            1            1

最后我会为这篇文章stock record这样:

date      | in_stock (item in stock) | out_stock (sum of item sold)
----------------------------------------------------------------------
2016-04-01  10                          0
2016-04-02  0                           6
2016-04-03  0                           3
2016-04-04  0                           1

据我所知,所有mysql次查询都没有给我这个结果。

这是我的代码:

SELECT SUM(sd.quantity) out_stock, s.search_date, ifnull(ss.quantity, 0) in_stock
FROM selling_detail sd JOIN selling s ON (sd.selling_id = s.id)
LEFT JOIN shop_stock ss ON (ss.search_date = s.search_date) WHERE (sd.shop_stock_id = 1)
GROUP BY s.search_date;

2 个答案:

答案 0 :(得分:1)

SELECT date,SUM(in_stock) in_stock,SUM(out_stock) out_stock FROM
 (
 SELECT stock_date date,quantity in_stock,0 out_stock FROM article
  UNION
 SELECT selling_date,0,quantity FROM selling JOIN selling_detail ON selling_detail.selling_id = selling.id
 ) x
GROUP BY date;

答案 1 :(得分:0)

当你试图将来自两个非常不同的表的类似数据结合起来时,你可能会盯着UNION ALL的桶。

这些方面应该让你开始:

     SELECT * 
       FROM (
         SELECT a.stock_date `date`, 
                SUM(a.quantity) `in_stock (item in stock)`,
                0 `out_stock (sum of item sold)`
           FROM article a
          WHERE a.id = :article_id
       GROUP BY `date`          
      UNION ALL
         SELECT s.selling_date,
                0,    
                SUM(sd.quantity)
           FROM selling s
           JOIN selling_detail sd
             ON sd.selling_id = s.id
            AND sd.article_id = :article_id
       /* WHERE s.selling_type = ??
            AND s.selling_status = ?? /* If necessary */
        GROUP BY `date`          
             ) sr
    ORDER BY `date`