【问题标题】:Group by month and return 0 if data not found按月分组,如果找不到数据则返回 0
【发布时间】:2013-12-02 00:38:26
【问题描述】:

我这几天一直在尝试修复我的查询:(。 它应该按月分组,如果没有找到记录,则返回 0。 一个例子:

    SELECT MONTH(created_at) AS month_num, 
DATE_FORMAT(created_at, '%b') AS month_name, COUNT(*) AS total_num 
    FROM table WHERE user_id=1384249399168
    GROUP BY MONTH(created_at) ORDER BY created_at DESC

结果:

month_num       month_name       total_num
     8            Aug                 20 
     7            Jul                 15
     5            May                 39
     2            Feb                 10
     1            Jan                 8

预期结果:

month_num       month_name       total_num
         12           Dec                 0
         11           Nov                 0
         10           Oct                 0
         9            Sep                 0
         8            Aug                 20 
         7            Jul                 15
         6            Jun                 0
         5            May                 39
         4            Apr                 0
         3            Mar                 0
         2            Feb                 10
         1            Jan                 8

我尝试了很多答案,尤其是MySql count() to return 0 if no records found,但没有成功。

有什么帮助吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我还没有测试,但它应该可以工作:

    SELECT MONTH(created_at) AS month_num, 
    DATE_FORMAT(created_at, '%b') AS month_name, ifnull(count(*),0) AS total_num 
        FROM table WHERE user_id=1384249399168
        GROUP BY MONTH(created_at) ORDER BY created_at DESC
    

    【讨论】:

    • 你知道,有一个功能。它被称为 COALESCE。
    • @Turdaliev 抱歉,它没有用。对于没有数据的月份,我返回相同的结果而没有 0。感谢您的快速回复
    • @TurdalievNursultan 谢谢,但结果还是一样。
    • @Strawberry 我已经尝试过 COALESCE 和 IFNULL 函数,但由于某些原因,它不会在没有数据的月份返回 0。谢谢
    • 尝试使用以下链接forums.mysql.com/read.php?10,514167中使用的方法
    【解决方案2】:

    这篇文章解决了我的问题。 我必须创建一个包含所有 12 个月的表。

    mysql select the count of records for every month 感谢任何人,尤其是@Turdaliev

    【讨论】:

    • 您还可以使用 UNION - 甚至是整数 (0-9) 实用程序表 - 或者(甚至更好的主意)在应用程序级别处理缺少月份的逻辑(例如,使用一点php)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2019-11-10
    相关资源
    最近更新 更多