【问题标题】:Mysql count return Zero if no record found如果没有找到记录,Mysql 计数返回零
【发布时间】:2026-02-18 10:10:01
【问题描述】:

我有两张桌子。

cities - id_city, city_name
properties - id_property, id_city, property_name

我想显示cities.city_name 并在它旁边显示[properties.count(id_city)]

如果没有找到记录而不是NULL,我如何进行仍然返回零的查询,以便得到如下结果:

London [123]
New York [0]
Berlin [11]

其中“纽约”是 [0],而不是 NULL 而不是 1?

【问题讨论】:

  • 你的问题不清楚....
  • 我尽力把它清理了一点,让它更清晰。

标签: mysql zero


【解决方案1】:

我认为以下内容会为您完成,尽管我尚未对其进行测试。诀窍是在一个表中获取属性计数,然后将该表左连接到城市表,使用 IFNULL 函数将 NULL 转换为 0。

SELECT city_name, IFNULL(property_count, 0)
FROM cities
LEFT JOIN
   (SELECT id_city, count(*) as property_count
    FROM properties
    GROUP BY id_city) city_properties
   USING (id_city);

【讨论】:

    【解决方案2】:

    使用外连接:

    select cities.city_name, count(properties.id_city)
      from cities left join properties on cities.id_city = properties.id_city
      group by 1
    

    【讨论】:

    • select cities.city_name, count(*) from cities left join properties on cities.id_city = properties.id_city group by 1
    • 错了!即使没有匹配项,它也会以“1”返回结果
    • 尝试 count(properties.id_property) 而不是 count(*)
    • 我已经更改了查询 - 看看。而不是 count(*) 你应该使用 count(左连接表中的列)
    【解决方案3】:

    查询:

    SELECT cities.*, COUNT(properties.id_city) as num
    FROM cities
    LEFT JOIN properties on cities.id_city=properties.id_city
    GROUP BY cities.id_city
    

    应该在你想要的地方返回一个 0 计数,尽管我不能 100% 确定它在 MySQL 中的工作方式。

    【讨论】:

    • 这个查询有什么作用?
    【解决方案4】:

    简单。使用“(计数(*)+ 0)”。任何 null 加 0 都会返回一个数字。

    【讨论】:

    • 但是如果列表中没有创建条目,它不会返回0。
    • 它不返回任何东西
    最近更新 更多