Django 计数具有重复值的行

Posted

技术标签:

【中文标题】Django 计数具有重复值的行【英文标题】:Django Count rows with duplicate values 【发布时间】:2019-07-12 15:30:31 【问题描述】:

我正在计算 django 模型中具有重复值的行,但遇到了一点麻烦。 我看过这个问题Django Select Rows with duplicate Values

而且解决方案是完美的。但我的问题是,如果我想计算行数并根据以下方式对它们进行分组:重复行的名称,以及它被重复了多少次, 而不是只显示重复的名称行。

到目前为止我的代码:

views.py

dupes = Application.objects.values('school_name').annotate(Count('id')).filter(id__count__gt=1)
query = Application.objects.filter(school_name__in=[item['school_name'] for item in dupes])

query 变量返回一个查询集,其中包含字段 school_name 的重复值的应用程序,而这一行:

repeated_names = Application.objects.values('school_name', 'category', ).annotate(Count('id')).order_by().filter(id__count__gt=1)

返回重复学校名称的列表。

我的期望是这样的:

(school_name=school_name_1, count=2), (school_name=school_name_2, count=3)..等等

【问题讨论】:

你显然是在前端渲染这些数据吧? @ans2human 是的,没错 【参考方案1】:

试试这个:

在你的Views.py 中使用这个查询集:

repeated_names = Application.objects.values('school_name', 'category').annotate(Count('id')).order_by().filter(id__count__gt=0)   # <--- gt 0 will get all the objects having occurred in DB i.e is greater than 0

gt 0 将获取所有已在 DB 中发生的对象,即大于 0

在你的Template:

 % for c in repeated_names %

 <ul>

 <li>c.school_name</li>

 <li>c.id__count</li>

 <li>c.category</li>


</ul>

% endfor %

【讨论】:

这适用于 client_ 省略。但是我有没有办法在视图中做到这一点? 另外,我怎样才能访问同一行中其他字段的值? @Abedy 是更新了答案,您已经在视图中执行此操作。为了获得其余的字段数据,我更新了查询。请检查 更新后的查询似乎有错误。它只显示一项。 @Abedy 使用您现在使用的查询以及您遇到的错误更新问题。我会检查的。

以上是关于Django 计数具有重复值的行的主要内容,如果未能解决你的问题,请参考以下文章

选择具有多个重复字段值的行

Django Query以获取特定列的所有不同值的计数[重复]

获取列具有特定值的行[重复]

Groupby - 具有重复值的熊猫 df 计数

将序号分配给具有重复值的行

MYSQL - 将具有多个重复值的行组合起来,然后删除重复项