jay*_*ynp 2 sql arrays postgresql min unnest
假设我有一个这样的表:
link_ids | length
------------+-----------
{1,4} | {1,2}
{2,5} | {0,1}
Run Code Online (Sandbox Code Playgroud)
我怎样才能找到每个的最小长度link_ids?
所以最终输出看起来像:
link_ids | length
------------+-----------
{1,4} | 1
{2,5} | 0
Run Code Online (Sandbox Code Playgroud)
假设一个这样的表:
CREATE TABLE t (
link_ids int[] PRIMARY KEY -- which is odd for a PK
, length int[]
, CHECK (length <> '{}'::int[]) -- rules out null and empty in length
);
Run Code Online (Sandbox Code Playgroud)
此查询适用于Postgres 9.3+
SELECT link_ids, min(len) As min_length
FROM t, unnest(t.length) len -- implicit LATERAL join
GROUP BY 1;
Run Code Online (Sandbox Code Playgroud)
或者你创建一个小功能(Postgres 8.4+):
CREATE OR REPLACE FUNCTION arr_min(anyarray) RETURNS anyelement AS
'SELECT min(i) FROM unnest($1) i' LANGUAGE sql IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)
然后:
SELECT link_ids, arr_min(length) AS min_length FROM t;
Run Code Online (Sandbox Code Playgroud)
或者,为了快速实现这一点,只要我们处理普通长度的integer数组,您就可以使用附加模块intarray并使用内置函数(Postgres 8.3+):sort()
SELECT link_ids, (sort(length))[1] AS min_length FROM t;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4968 次 |
| 最近记录: |