相关疑难解决方法(0)

如何在django中查询GROUP BY?

我查询一个模型,

Members.objects.all()
Run Code Online (Sandbox Code Playgroud)

它返回说

Eric, Salesman, X-Shop
Freddie, Manager, X2-Shop
Teddy, Salesman, X2-Shop
Sean, Manager, X2-Shop
Run Code Online (Sandbox Code Playgroud)

我想要的是,知道最好的Django方法来触发group_by查询到我的数据库,就像,

Members.objects.all().group_by('designation')
Run Code Online (Sandbox Code Playgroud)

哪个当然不起作用.我知道我们可以在"django/db/models/query.py"上做一些技巧,但我很想知道如何在没有修补的情况下做到这一点.

python django django-models

304
推荐指数
8
解决办法
26万
查看次数

计算 Django ORM 中按查询分组的带注释字段的总和的最大值?

为了简单起见,我有四个表(A、B、Category 和 Relation),Relation 表将IntensityA 的 A存储在 B 中,Category 存储 B 的类型。

A <--- 关系 ---> B ---> 类别

(所以A和B的关系是n比n,当B和Category的关系是n比1时)

我的类别和需要一个ORM到组关系的记录,然后计算出SumIntensity每个(A类,A)(似乎简单到这里),然后我要诠释的最大计算Sum每个类别。

我的代码是这样的:

 A.objects.values('B_id').annotate(AcSum=Sum(Intensity)).annotate(Max(AcSum))
Run Code Online (Sandbox Code Playgroud)

哪个抛出错误:

django.core.exceptions.FieldError: Cannot compute Max('AcSum'): 'AcSum' is an aggregate
Run Code Online (Sandbox Code Playgroud)

具有相同错误的Django-group-by包。

有关更多信息,请参阅此 stackoverflow 问题

我正在使用 Django 2 和 PostgreSQL。

有没有办法使用 ORM 来实现这一点,如果没有,使用原始 SQL 表达式的解决方案是什么?

更新

经过一番挣扎,我发现我写的确实是一个聚合,但是我想要的是找出每个类别中每个A的AcSum的最大值。所以我想我必须在 AcSum Calculation 之后再次对结果进行分组。基于这种见解,我发现了一个堆栈溢出问题,它提出了相同的概念(这个问题是在 1 年,2 个月前提出的,没有任何公认的答案)。将另一个值('id')链接到集合既不能作为 group_by 也不能作为输出属性的过滤器,它会从集合中删除 AcSum。由于按结果集分组的变化,将 AcSum 添加到 values() 也不是一个选项。我想我想做的是根据列内的字段(即id)重新分组查询分组。有什么想法吗?

python django postgresql orm aggregate

2
推荐指数
1
解决办法
2408
查看次数

标签 统计

django ×2

python ×2

aggregate ×1

django-models ×1

orm ×1

postgresql ×1