Funkcja agregująca która ignoruje nulle

0

Otóż wyciągam sobie rekordy z dwóch tabeli a potem robię na nich joina (tak na prawdę to nie tabele, tylko skomplikowane subquery, ale to nic). Fieldy wyglądają tak

id | recipient_id | client_id | tickets | last_ticket_date
---+--------------+-----------+---------+-------------------
id | recipient_id | client_id | numbers | last_number_date
---+--------------+-----------+---------+-------------------

Robię na nich full outer joina, a potem group by po wspólnych fieldach (recipient_id, client_id), na last_ticket_date oraz last_open_date robię MAX(), a tickets i numbers agreguję (json_agg).

Niestety czasem jest wpis w obu tabelach, ale często wpis jest tylko w jednej z nich; przez co niektóre agregowane fieldy zawierają nulle. Oto efekt
c94ba19aad.png

Bardzo chciałbym jakoś tak to zagregować żeby wyjściowe arraye nie zawierały żadnych nulli i, w przypadku brakujący rekordów, były to puste arraye. Częściowo rozwiązałem problem dodając distinc
def96c219b.png

Ale wtedy efekt jest taki
f9d144f26a.png

Pojedyńczy null w arrayu. Na biedę móglby zostać ale ja chciałbym żeby to i tak był pusty array. Nie chce potem w kodzie sprawdzać czy przypadkiem nie dostalem nulla w array bo to jakaś choroba.

Jak zrobić funkcję agregującą która by omijała nulle?

PS: Probówałem różne FILTER WHERE NOT NULL ale wtedy w ogóle nie mam arraya, tylko false albo null wlaśnie. A chciałbym array.

1

array_to_string usuwa NULLe...

select string_to_array(array_to_string(array_agg( distinct x), ','), ',') from (values('ala'), ('ola'), (null), ('ala'), ('ula')) x(x)

1 użytkowników online, w tym zalogowanych: 0, gości: 1