У меня есть таблица, содержащая транзакции с суммой. Я хочу создать пакет транзакций, чтобы сумма суммы каждой «группы по» была отрицательной. Моя проблема состоит в том, чтобы получить все идентификаторы строк, относящихся к «group by», где каждая группа проверяется условием суммы.
Я нахожу много решений, которые не работают для меня. Лучшее решение, которое я нашел, - это запросить БД в первый раз с 'group by' и суммой, а затем вернуть идентификаторы, чтобы, наконец, запросить БД в другой раз со всеми ними.
Вот пример того, что яхотел бы (это не работает!):
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.