sql - Mysql:每月统计记录(包括零条)

标签 sql mysql group-by

我正在尝试计算表中的记录并按日期对它们进行分组。我当前的查询类似于以下内容:

SELECT
   count(*), 
   MONTH(time) as month,
   YEAR(time) as year
FROM
   myTable
GROUP BY
   month, year
ORDER BY
   year, month

这行得通,除了我还想获得没有记录的月份的计数。

任何人都可以就如何实现这一目标提供意见/建议吗?

最佳答案

在 MySQL 中执行此操作的最简单方法是创建一个名为 months 的表,其中列出您感兴趣的所有月份,并对您的表使用 LEFT JOIN。

SELECT
   YEAR(time) AS year
   MONTH(time) AS month,
   COUNT(myTable.year) AS cnt, 
FROM months
LEFT JOIN myTable 
    ON months.year = myTable.year
    AND months.month = myTable.month
GROUP BY months.year, months.month
ORDER BY months.year, months.month

然而,由于这主要是一个演示问题,通常更容易的做法是像您已经在做的那样运行查询并在客户端(例如 PHP)中转换结果。

关于sql - Mysql:每月统计记录(包括零条),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3486998/

相关文章:

java - 如何找到一个月中的第一个和最后一个日期

java - 无法加载 MySQL JDBC 驱动程序

Mysql inner join 计数查询速度太慢

mysql - MySQL 中的数据透视表 - 根据日期时间列显示第一个和最后一个值

mysql用一个查询计算多种类型

mysql - 不是通过内部连接连接两个查询

mysql - 根据条件将结果集的值存储到不同的表中

mysql - 关于 ORDER BY - MySQL

ruby-on-rails - Ruby On Rails、Postgresql - 每分钟组的 Date_Part 或 Extract

MySQL:截断表与从表中删除