You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何返回左表所有Bucket,右表无数据时销售值显示0?

让LEFT JOIN分组查询返回所有Bucket并将空销售值设为0

我创建了名为buckets的表,包含mybuckets列用于存储Bucket数据,编写了如下查询语句:

SELECT 
 Id
,b.CityName
, SUM(Sales) as Sales
FROM buckets b
LEFT JOIN production as t1 ON b.CityName = t1.CityName
group by
1,2

但查询仅返回7个Bucket(9个Bucket中有2个无生产记录),需要实现显示所有Bucket,且无销售记录的行销售值为0。


问题原因

当buckets表中的城市在production表中没有匹配记录时,t1.Sales会是NULL,SUM(NULL)的结果同样是NULL。虽然LEFT JOIN会保留左表所有行,但NULL值的销售结果不符合需求,且容易被误认为未返回对应行。核心要解决的是把NULL销售值替换为0,同时确保所有左表行都被展示。

解决方案

使用COALESCE()函数(兼容多数主流数据库,如PostgreSQL、MySQL、SQL Server等)将聚合后的NULL值替换为0。同时建议显式指定GROUP BY的字段名,避免依赖位置编号带来的维护隐患。

修改后的查询语句:

SELECT 
 b.Id
, b.CityName
, COALESCE(SUM(t1.Sales), 0) AS Sales
FROM buckets b
LEFT JOIN production t1 ON b.CityName = t1.CityName
GROUP BY b.Id, b.CityName

示例说明

buckets表(部分数据)

IdCityName
1北京
2上海
3西宁
......
9海口

production表(部分数据)

CityNameSales
北京1500
上海2200
......

期望查询结果

IdCityNameSales
1北京1500
2上海2200
3西宁0
.........
9海口0

内容的提问来源于stack exchange,提问作者Kurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:45:47