如何从 postgresql 9.4 中的数组列中选择前几位

Posted

技术标签:

【中文标题】如何从 postgresql 9.4 中的数组列中选择前几位【英文标题】:How can i select top numbers from array column in postgresql 9.4 【发布时间】:2016-01-12 22:42:39 【问题描述】:
create table foo_table(foo_id int, foo_array int[], some_other_column text)

insert into foo_table(foo_array) values (ARRAY[1,3,8,32,55])
insert into foo_table(foo_array) values (ARRAY[2,4,9,31,38,92,99])
insert into foo_table(foo_array) values (ARRAY[5,12,15,35,47])
insert into foo_table(foo_array) values (ARRAY[6,7,13])

foo_array 数组将具有可变数量的元素。 所有数组元素都是唯一的,所有数组中的所有数字也都是唯一的。

我想知道如何从 foo_array 列中选择最大的 5 个数字,在这种情况下为 99、92、55、47、38。

【问题讨论】:

【参考方案1】:
select t.nr
from foo_table
  cross join lateral unnest(foo_array) as t(nr)
order by nr desc
limit 5  

或者更短一些:

select unnest(foo_array) nr
from foo_table
order by nr desc
limit 5  

在选择列表中使用 set-returning 函数有点不赞成 - 或者至少不鼓励。

【讨论】:

因为我想不出任何其他方式 - 是的,这是最快的方式(因为它是唯一的方式)。但不要指望这会非常快 - 但这是您不规范化数据所付出的代价。

以上是关于如何从 postgresql 9.4 中的数组列中选择前几位的主要内容,如果未能解决你的问题,请参考以下文章

如何将从函数返回的布尔值分配给 PostgreSQL 9.4 中的变量?

如何将 JSON 对象推送到 postgresql 中 jsonb 列中的数组

如何将新项目附加到 PostgreSQL 中的数组类型列中

PostgreSQL 9.4:在数组内的 JSON 字段 id 上聚合/连接表

插入复合类型数组给出错误 postgresql 9.4--

如何从 Postgresql 中的计算列中获取平均值?