如何从 PostgreSQL 数组列中获取唯一值

Jon*_*eto 7 sql arrays postgresql group-by distinct

我正在尝试提取一列数组的不同值。

例如,如果我有两行:

{jonathan,michelle}
{jonathan,michael}
Run Code Online (Sandbox Code Playgroud)

输出应该是:

{jonathan,michelle,michael}
Run Code Online (Sandbox Code Playgroud)

输出可以是数组或“虚拟列”,这不是问题。

Ale*_*xis 7

以下似乎可以解决问题:

SELECT DISTINCT(unnest(tbl.ar)) FROM tbl
Run Code Online (Sandbox Code Playgroud)


GMB*_*GMB 2

您可以取消嵌套并聚合回来,忽略重复项:

select array_agg(distinct u.val) new_ar
from mytable t
cross join lateral unnest(t.ar) as u(val)
Run Code Online (Sandbox Code Playgroud)

请注意,这并不能保证元素在最终数组中出现的顺序(有选项,但您没有指定在这方面所需的内容)。

DB Fiddle 演示

| 新_ar |
| :-------------------------- |
| {乔纳森,迈克尔,米歇尔} |