python - django queryset aggregation count 计数错误

标签 python django django-queryset django-aggregation

这是一个后续问题:
Django queryset get distinct column values with respect to other column

我的问题:

在 Django 中使用聚合计数会计算查询集中错误的内容,或者据我所知甚至不在我的查询集中的内容。

我做了什么 我用过:

queryset.order_by('col1', 'col2').distinct('col1', 'col2').values('col2')

获取模型的 col2 的值,其中所有行在 (col1, col2) 中都有一对不同的值。上面的链接中有一个示例。我打印了我的查询集,它看起来不错,我有

[{'col2': value1}, ... , {'col2': value1},{'col2': value2}, ..., {'col2': value2},...]

我现在想计算每个值出现在我得到的查询集中的次数。我使用聚合计数来执行此操作。我有:

a = {'count': Count(F(col2), distinct=False)}
queryset.annotate(**a)

我也用 ``distinct=True` 试过了,但没有成功

我希望得到 [{col2:value1, count: num1}, {col2:value2, count: num2} ...]
相反,我得到 [{col2: value1, count: num11}, {col2: value1, count: num12}, ... ,{col2: value1, count: num_1n}, {col2: value2, count: num21} , ... ,{col2: value1, count: num_2n}, ...]。 据我所知,num11, ...., num_1n 是 col2 中存在的 value1 行的数量,col1 中有任何特定值,在我之前使用 order_by('col1', 'col2').distinct ('col1', 'col2').values('col2') 准备查询时。

我不知道是什么原因造成的。我试着查看 queryset.query 参数,但我不明白哪里出错了。

如有任何帮助,我们将不胜感激。

最佳答案

.order_by 应仅指定 'col2',例如:

queryset.values('col2').annotate(
    count=Count('col1', distinct=True)
).order_by('col2')

这将因此产生一个如下所示的 QuerySet:

< QuerySet [
    {'col2': 1, 'count': 4 },
    {'col2': 2, 'count': 2 }
]>

这意味着 col1 有四个 distinct 值,给定 col2 的值为 1,两个col1 的不同值给定 col2 的值为 2

这将构建如下查询:

SELECT col2, COUNT(DISTINCT col1) AS count
FROM some_table
GROUP BY col2
ORDER BY col2

.distinct(..) 在这里不是必需的,因为由于 GROUP BY 我们只会获得不同的 col2 值,因为我们 COUNT(DISTINCT ..) 这意味着 col1 的每个 distinct 值都被计算一次。

关于python - django queryset aggregation count 计数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52907276/

相关文章:

python - 如何在 django 应用程序中访问通过 AJAX 传递的 JSON 数据?

django - 如何在 Django 通用 View 中添加额外的上下文和查询集字段?

python - Django - 通过相关字段的 ID 获取对象

python - 如何在 Django 中使用 Q.AND 限制对 ManyToMany 关系的查询

python - 根据关键行查找跨轴的第一个重复项

Django BooleanField 作为单选按钮但在内联表单之间

python - 如何在Django网页中显示excel文件

javascript - PayPal JavaScript SDK 按钮打开大约 :blank#blocked window in Django template but not in local HTML file

python - 如何替换为整数变量作为搜索模式的一部分

python - Matplotlib basemap 动画