【发布时间】:2018-03-17 03:45:39
【问题描述】:
使用 GROP BY 和 SUM 的一些 trable Django ORM 进行此查询:
"SELECT "p_record"."h", SUM("p_record"."size") AS "size__sum" FROM "p_record" GROUP BY "p_record"."h", "p_record"."size" ORDER BY "p_record"."size" DESC LIMIT 15"
当我这样做时
record.objects.all().values('h').annotate(Sum('size')).order_by('-size')[:15]
或
record.objects.all().values('h').order_by('h').annotate(Sum('size')).order_by('-size')[:15]
但是“h”没有分组!我在哪里错过了错误? 在 sqlite 和 postgres 上测试。 Django 10.6
有一些结果:
.
h: size:
<li>"aa.ss.aa" = 15</li>
<li>"aa.dd.aa" = 2</li>
<li>"aa.ss.aa" = 4</li>
<li>"zz.aa.cc" = 9</li>
<li>"aa.ss.aa" = 9</li>
【问题讨论】:
-
来自文档:在 order_by() 调用中使用的任何字段都包含在 SQL SELECT 列中。
-
那么我可以为仅组 'h' 做什么?
-
从
order_by中删除size -
但是如何按大小排序?
-
为聚合命名:
annotate(size=Sum('size')).order_by('size')