mysql - 如何从Mysql取回没有统计数据的日子的数据

标签 mysql count

我想获取一段时间(比如一周)的注册数量,这并不难,但我想知道 MySQL 是否有可能连续几天返回零没有注册。

一个例子: 数据:

ID_Profile    datCreate
1   2009-02-25 16:45:58
2   2009-02-25 16:45:58
3   2009-02-25 16:45:58
4   2009-02-26 10:23:39
5   2009-02-27 15:07:56
6   2009-03-05 11:57:30

SQL:

    SELECT 
        DAY(datCreate) as RegistrationDate, 
    COUNT(ID_Profile) as NumberOfRegistrations 
    FROM tbl_profile
    WHERE DATE(datCreate) > DATE_SUB(CURDATE(),INTERVAL 9 DAY)
    GROUP BY RegistrationDate
    ORDER BY datCreate ASC;

在这种情况下,结果将是:

RegistrationDate    NumberOfRegistrations
25  3
26  1
27  1
5   1

显然我中间错过了几天。目前我正在我的 php 代码中解决这个问题,但我想知道 MySQL 是否有任何方法可以自动返回 0 来表示丢失的天/行。这将是期望的结果:

RegistrationDate    NumberOfRegistrations
25  3
26  1
27  1
28      0
1       0
2       0
3       0
4       0
5   1

这样我们就可以使用 MySQL 来解决有关一个月天数的任何问题,而不是依赖 php 代码来计算每个月有多少天,因为 MySQL 内置了此功能。

提前致谢

最佳答案

不,但一种解决方法是创建一个带有日期主键的单列表,并预加载每天的日期。你会有从最早的起点一直到遥远的 future 的日期。

现在,您可以将统计数据与它进行 LEFT JOIN - 然后您将得到没有数据的那几天的空值。如果您确实想要零而不是空,请使用 IFNULL(colname, 0)

关于mysql - 如何从Mysql取回没有统计数据的日子的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614739/

相关文章:

c# - Entity Framework 。外键引用不存在的项目

mysql - 在 PhpMyAdmin 中创建表 - 错误 1064

mysqli - 如何在没有 PHP 的情况下计算插入之前的行数?

MySQL 确保所有性别都出现在输出中

python - 计算 CSV 中的属性值?

php - 注册页面上的操作 ="???"应该是什么?

php - 选择包含 Join 和 Count 的行

MySQL boolean 模式匹配不返回任何内容

mysql - 按组统计字段数据库

sql - 带外键引用行数的多表选择