选择过去3个月每月平均销售量

时间:2017-03-26 12:42:36

标签: mysql sql

我有3个mysql表,如下所示:

 - product(product_id, product_name)
 - order(order_id, order_date)
 - order_detail(order_detail_id, product_id, order_id, quantity)

我想了解过去三个月每月销售的产品数量的平均值,并按产品分组

我想选择所有产品(过去三个月内是否销售)。

 product_name | avg_quantity_sold_per_month
--------------|-----------------------------
  product_1   | 50
  product_2   | 0
  product_3   | 78

我尝试了这个查询:

 select 
    p.product_name
  , sum(od.quantity)/3 as avg_quantity_sold_per_month
 from order o
  inner join order_detail od on o.order_id = od.order_id
  inner join product p on od.product_id = p.product_id
 where 
   o.order_date >= now()-interval 3 month 
 group by p.product_id

但它只显示最后几个月销售的产品,我想选择所有产品。

2 个答案:

答案 0 :(得分:0)

使用left join

select p.product_name,
    sum(od.quantity) / 3 as avg_quantity_sold_per_month
from product p
left join order_detail od on od.product_id = p.product_id
left join orders o on o.order_id = od.order_id
    and o.order_date >= now() - interval 3 month
group by p.product_id

另外,尽量不要使用order之类的保留关键字作为标识符。

答案 1 :(得分:0)

如果您想要所有产品,则需要left join

select p.product_name,
       sum(od.quantity) / 3 as avg_quantity_sold_per_month
from product p left join
     order_detail od
     on od.product_id = p.product_id left join
     orders o
     on o.order_id = od.order_id and
        o.order_date >= now() - interval 3 month 
group by p.product_name;

使用left join,您可以从要保留的表开始。 (right join将重要信息留在 last 表格中,这更难以遵循。 where条件需要移至on子句,因此不会过滤掉不匹配的产品。

请注意,我还更改了group by键以匹配所选的键。这是一种最佳做法。