Jeśli używam array_agg
do zbierania nazw, otrzymuję moje nazwy oddzielone przecinkami, ale w przypadku, gdy istnieje wartość null
, ta wartość zerowa jest również brana jako nazwa w agregacie. Na przykład:Jak wykluczyć wartości null w array_agg jak w string_agg przy użyciu postgres?
SELECT g.id,
array_agg(CASE WHEN g.canonical = 'Y' THEN g.users ELSE NULL END) canonical_users,
array_agg(CASE WHEN g.canonical = 'N' THEN g.users ELSE NULL END) non_canonical_users
FROM groups g
GROUP BY g.id;
zwraca ,Larry,Phil
zamiast tylko Larry,Phil
(w moim 9.1.2, to pokazuje NULL,Larry,Phil
). jak w this skrzypce
Zamiast tego, jeśli mogę użyć string_agg()
, to pokazuje mi tylko nazwy (bez pustych przecinkami lub null) jak here
Problem polega na tym, że mam Postgres 8.4
zainstalowany na serwerze, a string_agg()
robi” t tam pracuj. Czy istnieje sposób uczynienia array_agg działa podobnie do string_agg()?
Zobacz ten PostgreSQL Mailing List Wątek na dużo tego tematu: http://postgresql.1045698.n5.nabble.com/array-agg-NULL-Handling-td2798942.html –
mi przykro, I don” Sądzę, że istnieje rozwiązanie w tym wątku. – Daud
Istnieją dwa rozwiązania w tym wątku. Jedną z nich jest stworzenie funkcji, a druga (tylko sugerowana, nie pokazana) jest tą, na którą odpowiedziałem. –