sql >> Databáze >  >> RDS >> PostgreSQL

Jak agregovat celá čísla v postgresql?

Výraz select array_agg(4) vrátí sadu řádků (ve skutečnosti sadu řádků s 1 řádkem). Proto dotaz

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

pokusí se porovnat celé číslo (b.id) s hodnotou řádku (který má 1 sloupec typu integer[]). Vyvolá chybu.

Chcete-li to opravit, měli byste použít poddotaz, který vrací celá čísla (ne pole celých čísel):

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

Případně můžete umístit název sloupce výsledku select array_agg(4) jako argument any , např.:

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

nebo

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

Více formálně, první dva dotazy používají ANY formuláře:

expression operator ANY (subquery)

a další dva používají

expression operator ANY (array expression)

jak je popsáno v dokumentaci:9.22.4. JAKÉKOLI/NĚKTERÉ a 9.23.3. JAKÉKOLI/NĚKTERÉ (pole) .



  1. nepodařilo se importovat soubor kódovaný utf16 do mysql

  2. Získejte verzi serveru MySQL s PDO

  3. mySQL>> Normalizace pole odděleného čárkami

  4. Jak vytvořím index v PostgreSQL založený pouze na malých písmenech?