在 MySQl 中计算一个月中某一天的事件数

Count the number of events on a day of the month in MySQl

我想计算在一个月中的任何一天(即 1 日到 31 日)发生的事件数。不是具体的月份。这样我就可以看到每个月的什么时间发生的事件最多。

我可以通过此查询获得跨越几个月的特定日期时间的事件总数

SELECT COUNT(*), DATE(created_at) 
  FROM loan 
 WHERE DATE(created_at) >= DATE('2020-08-01') 
   AND DATE(created_at) <= DATE('2020-12-31') 
 GROUP BY DATE(created_at);

例如,每月 7 号发生 10 件事情,29 号发生 50 件事情。所以我可以看到月底还有更多activity。

使用DAY()代替DATE()

SELECT DAY(created_at), COUNT(*)
FROM loan
WHERE created_at >= '2020-08-01' AND
      created_at < '2021-01-01'
GROUP BY DAY(created_at);

请注意,您不需要 WHERE 子句中的所有 DATE() 函数。如果索引可用于 WHERE 条件,则可能会降低性能。

考虑按 DAY() 而不是 DATE() 聚合:

SELECT COUNT(*), DAY(created_at) 
FROM loan 
WHERE created_at >= '2020-08-01' AND created_at < '2021-01-01'
GROUP BY DAY(created_at);

请注意,我更改了 where 子句,因此它不会对要过滤的列应用任何函数;这样效率更高,尤其是当您在 created_at.

上有索引时