mysql获取整月的平均数据

标签 mysql sql

给定以下示例数据:

数据

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 月。

我该怎么做?

最佳答案

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 不要格式化它,你也会比较日期,你不希望这样,

关于mysql获取整月的平均数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12034864/

相关文章:

mysql - 如何在 yii CDbCriteria 中转换 mysql 子查询?

php - MySQL 加入 "tolerance"

mysql - 使用Scala和spark从mysql中提取数据

php - 将 MySQL COUNT() 的 BIGINT 结果转换为 INT

mysql - AS 不使用 COUNT(*) 和 UNION

MySQL删除查询

sql - 在 MS SQL 中生成唯一值

sql - 计算来自多列的不同值

php - 用于获取上一行中下一条记录值的 SQL 查询

SQL - "Save results as CSV"- 使用逗号而不是分号