gpt4 book ai didi

python - django queryset aggregation count 计数错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:45 26 4
gpt4 key购买 nike

这是一个后续问题:
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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com