当前位置: 首页 > 面试题库 >

如果找不到记录, MySql count()返回0

魏威
2023-03-14
问题内容

我每月都有一组职位。现在,我需要一个数组,其中包含每个月发布的帖子总数。我尝试下面的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这就是为什么您没有得到结果的原因。一种有效的解决方案是通过将子查询与包含要在列表中显示的月份列表结合在一起。

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
  • SQLFiddle演示

输出

╔══════════╗
║ TOTALREC ║
╠══════════╣
║        0 ║
║        7 ║
║        9 ║
╚══════════╝


 类似资料:
  • 问题内容: 我现在正在使用Microsoft SQL,我的代码是: 我希望当[avail]存在时,返回[avail]的值,如果不存在,则返回0或“未找到” 谢谢! 问题答案: 你可以用这个

  • 问题内容: 我有以下选择语句,以获取流的下一个预定项目。如果没有匹配的行,我希望它返回默认值。这是我正在使用的行: 那应该可以获取最近计划的项目,但如果它早于查询之前30分钟,则不会。但是,如果用户未安排任何时间,则我需要一个默认值,以便流中实际播放某些内容。我尝试了以下方法: 和: 但是,如果未找到任何行,它将始终返回空结果。我该如何返回默认值? 问题答案: 一种方法 由于只返回一行,因此可以使

  • 问题内容: 如果path变量不在url中,是否可以使返回null?否则我需要做两个处理程序。一个为另一个,为,但即使没有定义游戏,我都做同样的事情,但是我从列表中选择第一个,但是如果定义了游戏参数,那么我就使用它。 这就是我尝试打开页面时得到的: 原因:java.lang.IllegalStateException:在@RequestMapping中找不到@PathVariable [exampl

  • 假设我们有一个名为hsm的hashMap,我想要hsm的值。获取(无效密钥)。因为invalidKey没有映射,它将为我返回一个空值,但我希望它为我返回invalidKey。我已经知道了一种方法,我们首先检查hsm。containsKey(invalidKey)以确保其有效且不会覆盖数组中的值,但是否还有其他方法?

  • 问题内容: 这是我的选择查询: 基本上是计算上周的商品评分(604800是1周内的秒数)。 问题是,当表中没有行时,this_week将作为NULL返回。如果表中没有行,我希望查询返回0。怎么做? 问题答案: 这应该可以解决问题: COALESCE是一个函数,它将从列表中返回第一个非NULL值。

  • 在MariaDB数据库中,使用语句和子句从表中检索一个或多个记录。 语法: 示例1: 以降序检索记录: 使用语句并带有子句查询表中的数据。结果列的值按降序显示,为。参考如下语句 - 执行上面查询语句,得到以下结果 - 示例2: 按列的值升序检索记录: 执行上面查询语句,得到以下结果 - 示例3:分页 在应用程序中,由于数据记录太多,不能全在一个页面中全部显示,我们经常要使用分页来显示。假设每页显示