【问题标题】:How to select items which sells increased compared to historical average如何选择与历史平均水平相比销量增加的商品
【发布时间】:2017-03-02 20:20:04
【问题描述】:

我想从我已售出的商品中获得季节性视图,这样我就可以知道下个月哪些产品会卖得更多(例如)。我希望将其与该产品的平均销售额进行比较

查询,用“人类的话”来说,应该是这样的:

销售额 [下个月,去年¹] 增加的产品有哪些 与该产品的历史平均销售额相比

哪些产品在 2016 年 4 月的销售额大于 产品历史平均销量

我想做的是发现下个月哪些产品会卖得更多,这样我就可以知道我应该买多少。

我的方法是创建一个包含总销售额和平均销售额的视图,然后进行如下查询:

SELECT 
    s.ITEM_ID,
    v.NAME,
    SUM(s.SOLD_PRICE) AS TOTAL,
    v.AVERAGE AS AVG_SALE
FROM 
    sales s
JOIN    
    view_averages v
ON
    s.ITEM_ID = v.ITEM_ID
WHERE 
    MONTH(s.SALE_DATE) = 3 AND YEAR(s.SALE_DATE)= 2016 AND
    TOTAL > AVG_SALE
GROUP BY
    s.ITEM_ID
ORDER BY TOTAL DESC

但我不太确定这是否是最好的方法。

感谢您的任何意见,并在此先感谢

【问题讨论】:

    标签: mysql aggregate average


    【解决方案1】:

    另一种方式是下面的查询

    SELECT 
        a.ITEM_ID, 
        a.NAME, 
        AVG(a.TOTAL_SALE) AVG_SALE, 
        SUM(IF(a.`year` = 2016 AND a.`month` = 3, a.TOTAL_SALE, 0)) AS TOTAL
    FROM (
        SELECT 
        s.ITEM_ID,
        s.NAME,
        YEAR(s.SALE_DATE) `year`,
        MONTH(s.SALE_DATE) `month`,
        SUM(s.SOLD_PRICE) AS TOTAL_SALE
    FROM 
        sales s
    GROUP BY
        s.ITEM_ID,s.NAME, YEAR(s.SALE_DATE), MONTH(s.SALE_DATE)
    ) a
    GROUP BY a.ITEM_ID
    HAVING TOTAL > AVG_SALE
    ORDER BY TOTAL DESC
    

    使用此查询,它只使用一次销售表,其中内部查询汇总有关销售的每月信息。外部查询然后平均所有月销售总和,并只保留特定月份的月销售总和 > 平均销售总和

    还有一件事可能需要考虑,如果您只需要该月之前的历史销售平均值,或者您是否需要您拥有数据的整个时间段的历史销售平均值。 我所做的查询在你有数据的整个时间内取平均值

    【讨论】:

    • 非常感谢您的宝贵时间。我希望查询考虑“下个月”之前的整个时间,所以你是对的。但我注意到一个错误(我的错误):我必须找到月平均销售额,这样我才能比较几个月的销售额。当我询问整个时间段的平均值时,我会得到历史平均值,因此不适合与月份平均值进行比较。但我认为我可以调整您的查询来实现这一点。我会尝试这样做并进行一些测试,据我所知,通过另一种方式,一些产品在 3 月份的销量将会增加。
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多