首页 > 解决方案 > PostgreSQL HStore() 字段

问题描述

我在我的 django 模型中使用了多个 PostgreSQL HStore 字段。HStore 字段的键是大整数,与应用程序中的其他一些字段相关,因此是随机的,不是预定义的。值是十进制数。像这样:"10intNumber" => "DecNumber"。所有 hstore 字段中都有相同的10IntNumber键,即使DecNumber为 0。该模型还包括用户的外键和状态。

我使用这样的 SQL 查询,对预定义的 10intNumber 值中的所有DecNumber 求和其中d.number 是之前的 10IntNumber 并且是从另一个查询集检索的:

query = f"""
    SELECT
        SUM(hstore_1::numeric) AS hstore_1_field,
        SUM(hstore_2::numeric) as hstore_2_field,
    FROM (
        SELECT
            UNNEST(hstore_field_1-> ARRAY {[str(d.number) for d in queryset]}) AS hstore_1,
            UNNEST(CASE WHEN status = '0' THEN hstore_field_2-> ARRAY {[str(d.number) for d in queryset]} ELSE ARRAY ['0'] END) AS hstore_2,
            FROM
                public.app_model
            WHERE
                hstore_field_1?| ARRAY {[str(d.number) for d in queryset]}
          ) AS b;
    """

我还使用 SQL 查询按相关的 user_id 和 user__othemodel_id 对总和进行分组。但之后我对 SQL 的了解就不足了。

我想总结前面提到的所有内容,但想按10intNumber对摘要进行分组。所以结果看起来像:

10intNumber 总和商店 1 总店 2
xxxxxxxxxxx 十进制(y.yy) 十进制(y.yy)
xxxxxxxxxxx 十进制(y.yy) 十进制(y.yy)

非常感谢您的帮助。

标签: pythonsqldjangopostgresql

解决方案


推荐阅读