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

5

我正在尝试提取数组列的DISTINCT值。

例如,如果我有两行:

{jonathan,michelle}
{jonathan,michael}

输出应该是:
{jonathan,michelle,michael}

输出可以是一个数组或"虚拟列",这不成问题。
2个回答

5
下面的方法似乎可以解决问题:
SELECT DISTINCT(unnest(tbl.ar)) FROM tbl

就我个人的设置而言,tbltbl.ar中是不必要的,也就是说,以下语句对我来说是有效的:SELECT DISTINCT(unnest(ar)) FROM tbl - undefined
@sambecker 是的,你说得对,tbl.ar 中的 tbl 是可选的,除非在一些更复杂的查询中需要解决歧义。 - undefined

2
您可以对嵌套的数据进行展开和聚合,忽略重复项:
select array_agg(distinct u.val) new_ar
from mytable t
cross join lateral unnest(t.ar) as u(val)

请注意,这并不保证元素在最终数组中出现的顺序(有选项,但您没有指定您在这方面想要什么)。 DB Fiddle上的演示
| new_ar                      |
| :-------------------------- |
| {jonathan,michael,michelle} |

1
当然,顺序不重要,但如果表名为car,列名为cityfrom,你能解释一下你的代码吗? - Jonathan Prieto
1
@JonathanPrieto:只需将“mytable”替换为“car”,将“ar”替换为“cityfrom”。 - GMB
工作正常,谢谢! - Jonathan Prieto
1
@JonathanPrieto:where 子句在 from 子句之后(其中包括 lateral join)。 - GMB
1
哦,我刚刚明白了,谢谢!这是答案:从autos t中选择array_agg(distinct u.val) new_usoauto,通过交叉连接lateral unnest(t.usoauto) as u(val)来解开t.usoauto的数组,其中'particular'= ANY(usoauto)。 - Jonathan Prieto
显示剩余2条评论

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