【问题标题】:mysql get average data for full monthsmysql获取整月的平均数据
【发布时间】:2021-04-15 13:11:35
【问题描述】:

给定以下示例数据:

tblData

Date           Sales
----------------------
2011-12-01       122
2011-12-02       433
2011-12-03       213
...
2011-12-31       235

2011-11-01       122
2011-11-02       433
2011-11-03       213
...
2011-11-30       235

2011-10-10       122
2011-10-11       433
2011-10-12       213
...
2011-10-31       235

请注意,10 月的数据从 10 月 10 日开始,而随后的几个月有完整的数据。

我需要获取所有完整月份的平均月销售额,在本例中为 2011 年 11 月和 12 月。

我该怎么做?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    SELECT `date`, AVG(`sales`)
    FROM sales
    GROUP BY YEAR(`date`), MONTH(`date`)
    HAVING COUNT(`date`) = DAY(LAST_DAY(`date`));
    

    Example

    如果你想限制结果,要么

    HAVING ...
    ORDER BY `date` DESC LIMIT 3
    

    它应该总是返回最近 3 个月的数据,或者类似的东西

    FROM ...
    WHERE DATE_FORMAT(CURDATE() - INTERVAL 3 MONTH, '%Y-%m')
       <= DATE_FORMAT(`date`, '%Y-%m')
    GROUP BY ...
    

    如果有的话,它应该返回前 3 个月的数据。我不确定哪个更好,但我不相信WHERE 可以使用date 上的任何索引,如果你使用DATETIME 并且不格式化它,你也会比较天数而你不想那样,

    【讨论】:

    • 谢谢鹌鹑。出于兴趣,如果我只想要最后三个完整的月份,而不是所有完整的月份,那将如何改变?
    • 我知道这已经很老了,但首先感谢您的回答 它帮助我做了一个小调整 :) SELECT date, AVG(sales) FROM sales GROUP BY YEAR(date), MONTH(date) 通过 删除 最后一行 HAVING COUNT(date) = DAY(LAST_DAY(date)); 我尽管我的数据也没有填写完整的月份,但能够根据单独的月份计算平均值。我不是 100% 确定这是为什么,但也许这会对其他人有所帮助:)
    【解决方案2】:

    目前无法测试,但请尝试一下:

    SELECT 
        DATE_FORMAT(`Date`, '%Y-%m') AS yearMonth,
        SUM(Sales)
    FROM
        yourTable
    GROUP BY 
        yearMonth
    HAVING 
        COUNT(*) = DAY(LAST_DAY(`Date`)
    

    【讨论】:

    • 您的分组有误 - 他需要每月平均数。仅按 Date 分组将为您提供每日平均值。
    • 您不能在 GROUP BY 中将列作为别名访问。考虑不是最佳的GROUP BY DATE_FORMAT(Date, '%Y-%m')GROUP BY YEAR(date), MONTH(date),正如鹌鹑在他的回答中建议的那样
    • @ZaarHai 在 MySQL 中可以,完全没问题。在我看来,它对眼睛更友好,意味着更容易阅读。
    • 你是对的。我仍然认为group by year(), month() 在性能方面更好。
    • 我很确定没有可测量的差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多