sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan samler man heltal i postgresql?

Udtryk select array_agg(4) returnerer sæt rækker (faktisk sæt rækker med 1 række). Derfor forespørgslen

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

forsøger at sammenligne et heltal (b.id) med en værdi af en række (som har 1 kolonne af typen heltal[]). Det rejser en fejl.

For at rette det skal du bruge en underforespørgsel, som returnerer heltal (ikke arrays af heltal):

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

Alternativt kan du placere kolonnenavnet på resultatet af select array_agg(4) som et argument for any , f.eks.:

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

eller

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

Mere formelt bruger de to første forespørgsler ANY af formularen:

expression operator ANY (subquery)

og de to andre bruger

expression operator ANY (array expression)

som det er beskrevet i dokumentationen:9.22.4. NOGEN/NOGLE og 9.23.3. ENHVER/NOGLE (array) .



  1. Advarsel:mysqli_connect():Ukendt MySQL-servervært

  2. JPA @NamedQuery med bitvise OG (&) som kriterier

  3. GET_FORMAT() Eksempler – MySQL

  4. Hvordan får man vist alle tabellerne med mere information (opret dato, størrelse,...) i en MySQL-database?