#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) |
Большое вам спасибо за любую помощь.