如何从 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 列中的数组