【问题标题】:Django ORM GROUP BY and SUMDjango ORM GROUP BY 和 SUM
【发布时间】: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')

标签: django orm


【解决方案1】:

它的工作

record.objects.all().values('h').annotate(sumsize=Sum('size')).order_by('-sumsize')[:15]

按“h”求和并按总和大小排序

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 2021-08-01
    • 2019-02-28
    • 2021-10-23
    • 2018-01-14
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    相关资源
    最近更新 更多