我每月都有一组职位。现在,我需要一个数组,其中包含每个月发布的帖子总数。我尝试下面的MySql查询,它的工作正常,但我期望0(零)几个月没有记录。在这里,它不返回0。
我读到COUNT()不会返回“ 0”,那么我该如何实现呢?
我尝试了IFNULL()和COALESCE(),但仍然得到相同的结果。请帮助此查询。谢谢你......
SELECT count(id) as totalRec FROM ('post') WHERE year(date) = '2013' AND monthname(date) IN ('January', 'February', 'March') GROUP BY year(date)-month(date) ORDER BY 'date' ASC
结果:
+----------+ | totalRec | +----------+ | 7 | | 9 | +----------+
预期结果(没有一月份的职位):
+----------+ | totalRec | +----------+ | 0 | | 7 | | 9 | +----------+
样本数据:
+----+---------------------+ | id | date | +----+---------------------+ | 24 | 2012-12-16 16:29:56 | | 1 | 2013-02-25 14:57:09 | | 2 | 2013-02-25 14:59:37 | | 4 | 2013-02-25 15:12:44 | | 5 | 2013-02-25 15:14:18 | | 7 | 2013-02-26 11:31:31 | | 8 | 2013-02-26 11:31:59 | | 10 | 2013-02-26 11:34:47 | | 14 | 2013-03-04 04:39:02 | | 15 | 2013-03-04 05:44:44 | | 16 | 2013-03-04 05:48:29 | | 19 | 2013-03-07 15:22:34 | | 20 | 2013-03-15 12:24:43 | | 21 | 2013-03-16 16:27:43 | | 22 | 2013-03-16 16:29:28 | | 23 | 2013-03-16 16:29:56 | | 11 | 2013-03-17 11:35:12 | +----+---------------------+
那个月没有记录,January这就是为什么您没有得到结果的原因。一种有效的解决方案是通过将子查询与包含要在列表中显示的月份列表结合在一起。
January
SELECT count(b.id) as totalRec FROM ( SELECT 'January' mnth UNION ALL SELECT 'February' mnth UNION ALL SELECT 'March' mnth ) a LEFT JOIN post b ON a.mnth = DATE_FORMAT(b.date, '%M') AND year(b.date) = '2013' AND DATE_FORMAT(b.date, '%M') IN ('January', 'February', 'March') GROUP BY year(b.date)-month(b.date) ORDER BY b.date ASC
输出
╔══════════╗ ║ TOTALREC ║ ╠══════════╣ ║ 0 ║ ║ 7 ║ ║ 9 ║ ╚══════════╝