У меня есть таблица, содержащая транзакции с суммой. Я хочу создать пакет транзакций, чтобы сумма суммы каждой «группы» была отрицательной.
Моя проблема заключается в том, чтобы получить все идентификаторы строк, связанных с «группой», где каждая группа проверяется условием суммы.
Я нахожу много решений, которые не работают для меня. Лучшее решение, которое я нашел, - это запросить базу данных в первый раз с «группой по» и суммой, а затем вернуть идентификаторы, чтобы, наконец, запросить базу данных еще раз со всеми из них.
Вот пример того, что я хотел бы (это не работает!):
SELECT * FROM transaction_table transaction
AND transaction.id IN (
select string_agg(grouped::character varying, ',' ) from (
SELECT array_agg(transaction2.id) as grouped FROM transaction_table transaction2
WHERE transaction2.c_scte='c'
AND (same conditions)
GROUP BY
transaction2.motto ,
transaction2.accountBnf ,
transaction2.payment ,
transaction2.accountClt
HAVING sum(transaction2.amount)<0
)
);
результат array_agg выглядит так:
{39758,39759}
{39757,39756,39755,39743,39727,39713}
и string_agg:
{39758,39759},{39757,39756,39755,39743,39727,39713}
Теперь мне просто нужно их использовать, но я не знаю, как...
к сожалению, это не работает из-за приведения типов:
ERROR: operator does not exist: integer = integer[]
Indice : No operator matches the given name and argument type(s). You might need to add explicit type casts.