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
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
Ale wtedy efekt jest taki
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.