PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да агрегирам цели числа в postgresql?

Израз select array_agg(4) връща набор от редове (всъщност набор от редове с 1 ред). Оттук и заявката

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

опитва да сравни цяло число (b.id) със стойност на ред (който има 1 колона от тип integer[]). Извежда грешка.

За да го коригирате, трябва да използвате подзаявка, която връща цели числа (а не масиви от цели числа):

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

Като алтернатива можете да поставите името на колоната на резултата от select array_agg(4) като аргумент на any , напр.:

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

или

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

По-формално, първите две заявки използват ANY във формата:

expression operator ANY (subquery)

а другите две използват

expression operator ANY (array expression)

както е описано в документацията:9.22.4. НЯКОИ/НЯКОИ и 9.23.3. ANY/SOME (масив) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Почасово групиране на редове с помощта на Django

  2. Проверете дали ключът съществува в JSON с PL/pgSQL?

  3. SQL скрипт за създаване на скрипт за вмъкване

  4. PostgreSQL nextval и currval в една и съща заявка

  5. Пребройте броя на актуализациите