如何在使用DjangoORM的PostgreSQL 9.6中使用StringAgg聚合函数

4

我正在尝试将一组字段连接到一个字段上。在MySQL中,我可以按照我的之前的问题中所述的方式处理它。但是现在我已经迁移到PostgreSQL,并且提出的解决方案在PostgreSQL 9.6中不起作用。 根据Django文档,可以使用StringAgg,如这里这里所述。 我相信,在更新版本的PostgreSQL中,我无法执行以下行:

from django.db.models.sql.aggregates import Aggregate as SQLAggregate

哪个会抛出错误:

from django.db.models.sql.aggregates import Aggregate as SQLAggregate
ModuleNotFoundError: No module named 'django.db.models.sql.aggregates'

如何使用StringAgg创建自己的聚合函数?

更新

看起来我不需要修改StringAgg来计算我需要的内容。 我只需按照Exprator在他们的答案中描述的导入即可:

from django.contrib.postgres.aggregates import StringAgg

我使用values()和group by语句对查询进行分组,并且由于字段不是字符串类型,所以我还需要使用Cast函数:

from django.contrib.postgres.aggregates import StringAgg
from django.db.models.functions import Cast
from django.db.models import TextField

query.annotate(
        AggregatedType = StringAgg(Cast('Types', TextField()),delimiter=',')
    )

你尝试过 PostgreSQL 的 exists string_agg 吗?文档在这里 https://www.postgresql.org/docs/current/static/functions-aggregate.html - Mabu Kloesen
当然,这正是我所想的。@MabuKloesen - Azee
1
阅读:https://learnbatta.com/blog/usage-of-group_by-string_agg-in-django-postgresql-74/ - anjaneyulubatta505
1个回答

10
from django.contrib.postgres.aggregates import StringAgg

这是如何导入聚合函数的方法。

谢谢你的回答。我已经成功导入了StringAgg。现在我正在创建自定义聚合函数任务。 - Azee
最终答案可以在问题的更新中找到。 - Azee
有没有办法在MariaDB上复制StringAgg的功能? - Skratt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接