sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo agregar enteros en postgresql?

Expresión select array_agg(4) devuelve un conjunto de filas (en realidad, un conjunto de filas con 1 fila). De ahí la consulta

select *
from b
where b.id = any (select array_agg(4))  -- ERROR

intenta comparar un número entero (b.id) con el valor de una fila (que tiene 1 columna de tipo entero[]). Genera un error.

Para solucionarlo, debe usar una subconsulta que devuelva números enteros (no matrices de números enteros):

select *
from b
where b.id = any (select unnest(array_agg(4)))

Alternativamente, puede colocar el nombre de la columna del resultado de select array_agg(4) como argumento de any , por ejemplo:

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

o

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

Más formalmente, las dos primeras consultas usan ANY de la forma:

expression operator ANY (subquery)

y los otros dos usan

expression operator ANY (array expression)

como se describe en la documentación:9.22.4. CUALQUIERA/ALGUNOS y 9.23.3. CUALQUIERA/ALGUNOS (matriz) .