Как исключить или удалить значения NULL из array и array_agg с помощью PostgreSQL - PullRequest
0 голосов
/ 08 мая 2020

В следующем запросе:

SELECT
  myid,
  min(name) AS name,
  array_agg(array[zip, city])) AS city
FROM my_table
WHERE name LIKE 'Doe'
GROUP BY myid
LIMIT 10

Я получаю следующий результат:

+-------+------+-------------------+
| myid  | name | city              |
+-------+------+-------------------+
| A123  | Doe  | {{69,"Groville"}} |
| B456  | Doe  | {{NULL,NULL}}     |
+-------+------+-------------------+

Как мне избавиться от значений NULL и получить пустое поле для city вместо?

=== EDIT ===

Заменено (array_agg(name))[1] AS name на min(name) AS name в запросе, как предлагает @ a_horse_with_no_name.

Ответы [ 2 ]

3 голосов
/ 08 мая 2020

Вы можете использовать условное агрегирование.

SELECT myid,
       min(name) AS name,
       array_agg(array[zip, city]) filter (where num_nulls(zip, city) = 0) AS city
FROM my_table
WHERE name LIKE 'Doe'
GROUP BY myid
LIMIT 10
0 голосов
/ 08 мая 2020

Вы можете использовать array_remove():

array_agg(array_remove(array[zip, city], null))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...