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

Django中SQLite实现左连接查询含0值的国家人口总和

解决Django查询国家人口总和时缺失无数据国家的问题

这个问题我做项目时也碰到过,你当前的查询逻辑是从State(看你代码里写的City应该是笔误啦,对应你的state表应该用State模型)出发做聚合,本质是内连接,只会返回存在关联State数据的国家,像c这种没有任何州/省数据的自然就被过滤掉了。

要解决这个问题,我们需要从Country模型出发做左连接查询,确保所有国家都被包含,再用Coalesce函数把空的人口总和转为0,具体实现如下:

正确的查询代码

from django.db.models import Sum, Value
from django.db.models.functions import Coalesce

# 从Country模型出发,左关联State并聚合人口总和,空值替换为0
countries_population = Country.objects.annotate(
    total_pop=Coalesce(Sum('state__population'), Value(0))
).values('name', 'total_pop')

代码解释

  • 从Country模型开始查询:这样会默认包含所有国家记录,不管有没有对应的State数据
  • Coalesce函数:用来处理聚合后返回的None值(也就是没有任何State的国家),把它替换成我们指定的Value(0)
  • Sum('state__population'):通过外键关联,对每个国家下的所有State的population字段求和

格式化为你需要的字符串

拿到查询结果后,我们可以快速拼接成你要的格式:

result = ", ".join([f"{item['name']}有{item['total_pop']}人口" for item in countries_population])
print(result)
# 输出结果:A有236688人口,b有8471110人口,c有0人口

这样就能完美包含所有国家,包括没有任何州/省数据的c啦~

内容的提问来源于stack exchange,提问作者Jaskaran singh Rajal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:07:48