PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak agregować liczby całkowite w postgresql?

Wyrażenie select array_agg(4) zwraca zestaw wierszy (w rzeczywistości zestaw wierszy z 1 wierszem). Stąd zapytanie

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

próbuje porównać liczbę całkowitą (b.id) z wartością wiersza (który ma 1 kolumnę typu integer[]). Zgłasza błąd.

Aby to naprawić, powinieneś użyć podzapytania, które zwraca liczby całkowite (nie tablice liczb całkowitych):

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

Alternatywnie możesz umieścić nazwę kolumny wyniku select array_agg(4) jako argument any , np.:

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

lub

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

Bardziej formalnie, pierwsze dwa zapytania używają ANY postaci:

expression operator ANY (subquery)

a pozostałe dwa używają

expression operator ANY (array expression)

tak jak opisano w dokumentacji:9.22.4. DOWOLNE/NIEKTÓRE oraz 9.23.3. DOWOLNE/NIEKTÓRE (tablica) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcje agregujące na tablicach

  2. Nie można otworzyć połączenia spowodowanego tym, że ten zestaw wyników jest zamknięty

  3. zapisywalne wspólne wyrażenie tabelowe i wielokrotne instrukcje wstawiania

  4. Zdalny przepływ pracy Symfony2 + Netbeans (feat. git)

  5. Problemy z nieskończonym zakresem czasu w Railsach