Skip to main content
 首页 » 编程设计

python之如何在 Django 中使用 GROUP BY 计数(*)

2025年05月04日44grandyang

我想在 Django QuerySet 中执行与以下查询等效的操作:

SELECT address, city, state, zip, COUNT(*) 
FROM entries 
GROUP BY address, city, state, zip 
HAVING COUNT(*) > 5 

不幸的是,Django 的 Count() 聚合函数需要一个字段,但我没有计算任何一个单独的字段。另外,我不能将“*”用作字段。

是使用 .raw() 执行此操作的唯一方法吗?

请您参考如下方法:

实际上,尽管 count() 在一般情况下是正确的,但它不适用于 GROUP BY - 它返回单个值。这种情况最好通过以下方式处理:

qs = Entries.objects.values('address', 'city', 'state', 'zip').annotate(entry_count=Count('id')) 

这应该计算 ID 的数量,因此计算每个组中唯一行的数量。

对于 having 部分,对注解进行过滤即可:

qs = qs.filter(entry_count__gt=5)