Cra*_*ger 43
排序整数数组的最佳方法毫无疑问是使用intarray扩展,它将比任何SQL公式更快,更快,更快地执行:
CREATE EXTENSION intarray;
SELECT sort( ARRAY[4,3,2,1] );
Run Code Online (Sandbox Code Playgroud)
适用于任何数组类型的函数是:
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
RETURNS ANYARRAY LANGUAGE SQL
AS $$
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
$$;
Run Code Online (Sandbox Code Playgroud)
(在其他地方讨论之后,我用Pavel取代了我的版本稍快一点).
Tom*_*zky 15
在PostrgreSQL 8.4及更高版本中,您可以使用:
select array_agg(x) from (select unnest(ARRAY[1,5,3,7,2]) AS x order by x) as _;
Run Code Online (Sandbox Code Playgroud)
但它不会很快.
在较旧的Postgres中,你可以像这样实现这个
CREATE OR REPLACE FUNCTION unnest(anyarray)
RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i] FROM
generate_series(array_lower($1,1),
array_upper($1,1)) i;
$BODY$
LANGUAGE 'sql' IMMUTABLE
Run Code Online (Sandbox Code Playgroud)
和array_agg这样:
CREATE AGGREGATE array_agg (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
);
Run Code Online (Sandbox Code Playgroud)
但它会更慢.
您还可以在pl/pgsql中实现任何排序算法,或者您可以插入postgres的任何其他语言.
Fra*_*ens 12
只需使用函数unnest():
SELECT
unnest(ARRAY[1,2]) AS x
ORDER BY
x DESC;
Run Code Online (Sandbox Code Playgroud)
请参阅Pg文档中的数组函数.
这对我有用,来自http://www.pgsql.cz/index.php/PostgreSQL_SQL_Tricks_I#General_array_sort
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
RETURNS ANYARRAY LANGUAGE SQL
AS $$
SELECT ARRAY(
SELECT $1[s.i] AS "foo"
FROM
generate_series(array_lower($1,1), array_upper($1,1)) AS s(i)
ORDER BY foo
);
$$;
Run Code Online (Sandbox Code Playgroud)
请看Craig的回答,因为他对Postgres的了解要多得多,并且有更好的答案.如果可能,也投票删除我的答案.
| 归档时间: |
|
| 查看次数: |
30856 次 |
| 最近记录: |