如何从数组和array_agg中排除或删除NULL值,使用PostgreSQL。

3
在下面的请求中:
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字段替换为空?

1
无关的话题,但是:为什么不使用min(name)而是先聚合所有的名字然后再选择一个呢? - user330315
因为我不知道它 :) 谢谢你的建议! - undefined
2个回答

6

你可以使用条件聚合。

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

5
你可以使用 array_remove() 函数:
array_agg(array_remove(array[zip, city], null))

我遇到了这个错误:ERROR: 无法累积空数组,SQL 状态:2202E - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接