MySQL选择产品随时间的平均销售数据

MySQL选择产品随时间的平均销售数据,mysql,select,time,Mysql,Select,Time,我有下面的MySQL表,如下图所示。该表被命名为示例_表: 该表包含已销售产品的列表、销售时间以及销售价格 现在,我尝试在表格上做一些“分析”,以确定用户输入的特定日期前5天的平均销售价格 我试图实现的输出如下。 我有部分查询,但这不是我所需要的。 SELECT product_name,time_value,AVG(selling_price) as 'Average Selling Price' from example_table where product_name='Samsung

我有下面的MySQL表,如下图所示。该表被命名为示例_表:

该表包含已销售产品的列表、销售时间以及销售价格

现在,我尝试在表格上做一些“分析”,以确定用户输入的特定日期前5天的平均销售价格

我试图实现的输出如下。

我有部分查询,但这不是我所需要的。

SELECT product_name,time_value,AVG(selling_price) as 'Average Selling Price'
from example_table
where product_name='Samsung Galaxy S4'
and time_value in (
(SELECT SUBDATE('2013-05-21',INTERVAL 1 DAY)),
(SELECT SUBDATE('2013-05-21',INTERVAL 2 DAY)),
(SELECT SUBDATE('2013-05-21',INTERVAL 3 DAY)),
(SELECT SUBDATE('2013-05-21',INTERVAL 4 DAY)),
(SELECT SUBDATE('2013-05-21',INTERVAL 5 DAY)))
group by product_name,time_value
order by time_value asc
此查询提供以下结果,但请注意缺少的天数


也就是说,5月16日和5月17日没有销售数据,我需要根据上面的预期结果图像在结果中显示这些数据。

您可以这样做:

SELECT
  d.date,
  d.product_name,
  COALESCE(AVG(selling_price), 0) as 'Average Selling Price'
from
(
   SELECT 'Samsung Galaxy S4' AS Product_name, 
          SUBDATE('2013-05-21', INTERVAL 1 DAY) AS date
   UNION ALL
   SELECT 'Samsung Galaxy S4', SUBDATE('2013-05-21',INTERVAL 2 DAY)
   UNION ALL
   SELECT 'Samsung Galaxy S4', SUBDATE('2013-05-21',INTERVAL 3 DAY)
   UNION ALL
   SELECT 'Samsung Galaxy S4', SUBDATE('2013-05-21',INTERVAL 4 DAY)
   UNION ALL
   SELECT 'Samsung Galaxy S4', SUBDATE('2013-05-21',INTERVAL 5 DAY)
) AS d 
LEFT JOIN
(
   SELECT *
   FROM example_table
   WHERE product_name = 'Samsung Galaxy S4' 
) AS e ON d.date = e.time_value
group by d.product_name, d.date
order by d.date asc;
请在此处查看它的实际操作:

这将为您提供:

|       DATE |      PRODUCT_NAME | AVERAGE SELLING PRICE |
----------------------------------------------------------
| 2013-05-16 | Samsung Galaxy S4 |                     0 |
| 2013-05-17 | Samsung Galaxy S4 |                     0 |
| 2013-05-18 | Samsung Galaxy S4 |                 517.5 |
| 2013-05-19 | Samsung Galaxy S4 |                 482.5 |
| 2013-05-20 | Samsung Galaxy S4 |                   460 |
检查


谢谢你。一个很好的整洁的解决方案,使用用户定义的变量可以完美地工作!
SELECT 
 @rn := @rn - 1 AS row_num,@am := DATE_SUB('2013-05-21', INTERVAL @rn DAY ) AS 'time_value',et.product_name,
 IFNULL((SELECT 
    AVG(er.selling_price)
  FROM 
   example_table er
    WHERE 
   er.time_value = @am
  GROUP BY @am ),0) AS 'Average Selling Price' 
FROM 
 (SELECT @rn := 6 , @am := DATE_SUB('2013-05-21', INTERVAL @rn DAY) ) r ,
 example_table et 
 WHERE et.product_name = "Samsung Galaxy S4" AND et.time_value > DATE_SUB('2013-05-21', INTERVAL 6 DAY)