2

这可能在某个地方,但不太确定如何问它。希望这将是一个快速的。假设我有一张如下表:

name         count   site
Guy Man      2       ABC
Guy Man      3       BCD
Guy Man      4       CDE
Girl Woman   2       ABC
Girl Woman   2       BCD
Girl Woman   3       CDE

我想对这些进行注释,以便获得名称、总数和站点列表。因此,鉴于上面的数据,我会得到以下信息。

[
  {
    "name": "Guy Man",
    "count_total": 9,
    "site_list": "ABC, BCD, CDE"
  },
  {
    "name": "Girl Woman",
    "count_total": 7,
    "site_list": "ABC, BCD, CDE"
  }
]

我知道如何获得count_total,但我不确定如何获得site_list。有任何想法吗?

4

2 回答 2

4

PostgreSQL按名称字段结合ArrayAggdistinct=True标志分组的解决方案:

from django.contrib.postgres.aggregates.general import ArrayAgg
from django.db.models import Count

Model.objects.values('name').annotate(
    count_total=Count('count'),
    site_list=ArrayAgg('site', distinct=True),
)
于 2019-08-12T14:56:20.993 回答
1

如果您使用的是 postgres,则可以使用 ArrayAgg

文档 - https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/aggregates/

您可以使用值进行分组,如下所示应该可以解决问题。Model.objects.values('name').distinct().annotate(site_list=ArrayAgg('site'), count_total=Count('count'))

于 2019-08-12T14:54:26.150 回答