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

标签 python django

我想在 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)

关于python - 如何在 Django 中使用 GROUP BY 计数(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406028/

相关文章:

django - 如何将装饰器应用于 django 中(模块的)所有 View

python - “WSGIRequest”对象没有属性 'FILE'

python - 根据 Python 中另外两个数组的值创建数组的子集

python - 在 AWS Lambda 中重用 scikit 学习模型 .pkl

python - 为什么我的 Python 子进程在由 supervisord 管理时会出错?

python - 不应实例化的类

javascript - 在 Django 模板语言中检索 URL

Django,重定向用户无法识别的网址(不仅仅是 404 模板)

python - 在 Django 模型中保存时区

python - 遍历模板内的元组返回空值