使用 Django ORM 过滤计数

发布于 2024-09-24 18:47:44 字数 375 浏览 2 评论 0原文

我有一个查询,基本上是“计算 X 类型的所有项目,并返回多次存在的项目及其计数”。现在我有这个:

Item.objects.annotate(type_count=models.Count("type")).filter(type_count__gt=1).order_by("-type_count")

但它什么也不返回(所有项目的计数都是 1)。我做错了什么?

理想情况下,它应该得到以下内容:

Type
----
1
1
2
3
3
3

并返回:

Type, Count
-----------
1     2
3     3

I have a query that's basically "count all the items of type X, and return the items that exist more than once, along with their counts". Right now I have this:

Item.objects.annotate(type_count=models.Count("type")).filter(type_count__gt=1).order_by("-type_count")

but it returns nothing (the count is 1 for all items). What am I doing wrong?

Ideally, it should get the following:

Type
----
1
1
2
3
3
3

and return:

Type, Count
-----------
1     2
3     3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼趣 2024-10-01 18:47:44

为了计算每种类型的出现次数,您必须按 type 字段进行分组。在 Django 中,这是通过使用 values 获取该字段来完成的。所以,这应该有效:

Item.objects.values('group').annotate(
     type_count=models.Count("type")
).filter(type_count__gt=1).order_by("-type_count")

In order to count the number of occurrences of each type, you have to group by the type field. In Django this is done by using values to get just that field. So, this should work:

Item.objects.values('group').annotate(
     type_count=models.Count("type")
).filter(type_count__gt=1).order_by("-type_count")
指尖微凉心微凉 2024-10-01 18:47:44

这是逻辑错误;)

type_count__gt=1 意味着 type_count > 1 因此,如果 count == 1 则不会显示:)
使用 type_count__gte=1 代替 - 这意味着 type_count >= 1 :)

It's logical error ;)

type_count__gt=1 means type_count > 1 so if the count == 1 it won't be displayed :)
use type_count__gte=1 instead - it means type_count >= 1 :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文