PostgreSQL 给数组排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PostgreSQL 给数组排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2621字,纯文字阅读大概需要4分钟。
内容图文
PostgreSQL 支持数组,可是没有对数据内部元素进行排序的一个函数。 ?今天我分别用PLPGSQL和PLPYTHONU写了一个。演示样例表结构:
t_girl=# \d test_array;
Table "ytt.test_array"
Column | Type | Modifiers
--------+-----------+---------------------------------------------------------
id | integer | not null default nextval(‘test_array_id_seq‘::regclass)
str1 | integer[] |
Indexes:
"test_array_pkey" PRIMARY KEY, btree (id)
演示样例数据:
t_girl=# select * from test_array;
id | str1
----+---------------------------
1 | {100,200,300,5,10,20,100}
2 | {200,100,2,30,0,5}
3 | {2000,101,2,30,0,10}
(3 rows)
Time: 1.513 ms
plsql存储函数array_sort运行结果:
升序
t_girl=# select id,array_sort(str1,‘asc‘) from test_array;
id | array_sort
----+---------------------------
1 | {5,10,20,100,100,200,300}
2 | {0,2,5,30,100,200}
3 | {0,2,10,30,101,2000}
(3 rows)
Time: 2.377 ms
降序
t_girl=# select id,array_sort(str1,‘desc‘) from test_array;
id | array_sort
----+---------------------------
1 | {300,200,100,100,20,10,5}
2 | {200,100,30,5,2,0}
3 | {2000,101,30,10,2,0}
(3 rows)
Time: 3.318 ms
t_girl=#
python 存储函数array_sort_python 运行结果:
降序:
t_girl=# select id,array_sort_python(str1,‘desc‘) from test_array;
id | array_sort_python
----+---------------------------
1 | {300,200,100,100,20,10,5}
2 | {200,100,30,5,2,0}
3 | {2000,101,30,10,2,0}
(3 rows)
Time: 2.797 ms
升序:
t_girl=# select id,array_sort_python(str1,‘asc‘) from test_array;
id | array_sort_python
----+---------------------------
1 | {5,10,20,100,100,200,300}
2 | {0,2,5,30,100,200}
3 | {0,2,10,30,101,2000}
(3 rows)
Time: 1.856 ms
t_girl=#
附: array_sort_python 代码:
CREATE or replace FUNCTION array_sort_python(c1 text [],f_order text) RETURNS text [] AS $$
result = []
if f_order.lower() == ‘asc‘:
c1.sort()
result = c1
elif f_order.lower() == ‘desc‘:
c1.sort(reverse=True)
result = c1
else:
pass
return result
$$ LANGUAGE plpythonu;
array_sort 代码:
create or replace function array_sort(anyarray,f_order text) returns anyarray
as
$ytt$
declare array1 alias for $1;
tmp int;
result text [];
begin
if lower(f_order) = ‘desc‘ then
for tmp in select unnest(array1) as a order by a desc
loop
result := array_append(result,tmp::text);
end loop;
return result;
elsif lower(f_order) = ‘asc‘ then
for tmp in select unnest(array1) as a order by a asc
loop
result := array_append(result,tmp::text);
end loop;
return result;
else
return array[‘f_order must be asc or desc!‘];
end if;
end;
$ytt$ language plpgsql;
内容总结
以上是互联网集市为您收集整理的PostgreSQL 给数组排序全部内容,希望文章能够帮你解决PostgreSQL 给数组排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。