PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como agregar inteiros no postgresql?


Expressão select array_agg(4) retorna conjunto de linhas (na verdade, conjunto de linhas com 1 linha). Daí a consulta
select *
from b
where b.id = any (select array_agg(4))  -- ERROR

tenta comparar um inteiro (b.id) com um valor de uma linha (que tem 1 coluna do tipo integer[]). Ele gera um erro.

Para corrigi-lo, você deve usar uma subconsulta que retorne inteiros (não matrizes de inteiros):
select *
from b
where b.id = any (select unnest(array_agg(4)))

Alternativamente, você pode colocar o nome da coluna do resultado de select array_agg(4) como um argumento de any , por exemplo.:
select *
from b
cross join (select array_agg(4)) agg(arr)
where b.id = any (arr)

ou
with agg as (
    select array_agg(4) as arr)
select *
    from b
    cross join agg
    where b.id = any (arr)

Mais formalmente, as duas primeiras consultas usam ANY do formulário:
expression operator ANY (subquery)

e os outros dois usam
expression operator ANY (array expression)

como descrito na documentação:9.22.4. QUALQUER/ALGUMA e 9.23.3. ANY/SOME (matriz) .