Поле PostgreSQL HStore()

#python #sql #django #postgresql

#python #sql #django #postgresql

Вопрос:

Я использую несколько полей PostgreSQL HStore в моей модели django. Ключи полей HStore представляют собой большие числа int, которые связаны с некоторыми другими полями в приложении и поэтому являются случайными, а не предопределенными. Значения представляют собой десятичные числа. Вот так: "10intNumber" => "DecNumber" . Все поля hstore содержат одинаковые ключи 10IntNumber, даже если decNumber равно 0. Модель также включает внешний ключ для пользователя и статус.

  • Статус равен 1: вычисляется и суммируется только hstore_field_1.
  • Статус 0: оба hstore_field_1 и hstore_field_2 вычисляются и суммируются.

Я использую SQL-запрос, подобный этому, чтобы суммировать все decNumber в значениях для предопределенного 10intNumber, где 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-запрос для группировки сумм по соответствующему идентификатору пользователя и идентификатору пользователя __othemodel_. Но после этого мои знания SQL заканчиваются.

Я хотел бы суммировать все, как упоминалось ранее, но хотел бы сгруппировать сводки по 10intNumber . Чтобы результат выглядел так:

10intNumber Сумма Hstore 1 Сумма Hstore 2
xxxxxxxxxxx Десятичное число (y.yy) Десятичное число (y.yy)
xxxxxxxxxxx Десятичное число (y.yy) Десятичное число (y.yy)

Большое вам спасибо за любую помощь.