sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur aggregerar man heltal i postgresql?

Uttryck select array_agg(4) returnerar uppsättning rader (faktiskt uppsättning rader med 1 rad). Därav frågan

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

försöker jämföra ett heltal (b.id) med ett värde på en rad (som har en kolumn av typen heltal[]). Det ger upphov till ett fel.

För att fixa det bör du använda en underfråga som returnerar heltal (inte matriser av heltal):

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

Alternativt kan du placera kolumnnamnet för resultatet av select array_agg(4) som ett argument för any , t.ex.:

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)

Mer formellt använder de två första frågorna ANY av formuläret:

expression operator ANY (subquery)

och de andra två använder

expression operator ANY (array expression)

som det beskrivs i dokumentationen:9.22.4. NÅGOT/NÅGRA och 9.23.3. NÅGOT/NÅGRA (array) .



  1. Hur man anropar en lagrad procedur och får returvärde i Slick (med Scala)

  2. MySQL-uppdatering om värdet är större än det aktuella värdet

  3. MySQL Välj efter senaste tidsstämpel

  4. PHP 7.2.2 + mysql 8.0 PDO ger:autentiseringsmetod okänd för klienten [caching_sha2_password]