我有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


但是它只显示最近一个月出售的产品,我想选择所有产品。

最佳答案

使用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之类的保留关键字作为标识符。

关于mysql - 选择最近3个月每月的平均销售量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43028848/

10-13 00:49