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 给数组排序的更多相关文章

  1. postgresql 基本语法

    postgresql数据库创建/修改/删除等写入类代码语法总结: 1,创建库 2,创建/删除表 2.1 创建表 create table myTableName 2.2 如果表不存在则创建表 crea ...

  2. postgresql无法安装pldbgapi的问题

    要对函数进行调试需要安装插件pldbgapi,当初在windows上面的postgresql实例中执行了一下语句就安装上了: create extension pldbgapi; 但是在linux中执 ...

  3. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  4. MongoDB与PostgresQL无责任初步测试

    PostgresQL一秒能插入多少条记录,MongoDB呢?读取的情况又如何?我写了一些简单的程序,得出了一些简单的数据,贴在这里分享,继续往下阅读前请注意下本文标题中的“无责任”,这表示此测试结果不 ...

  5. CSharpGL(36)通用的非托管数组排序方法

    CSharpGL(36)通用的非托管数组排序方法 如果OpenGL要渲染半透明物体,一个方法是根据顶点到窗口的距离排序,按照从远到近的顺序依次渲染.所以本篇介绍对 UnmanagedArray< ...

  6. [PostgreSQL] 图解安装 PostgreSQL

    图解安装 PostgreSQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5894462.html 序 园友的一篇<Asp.Net Cor ...

  7. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  8. PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

    最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...

  9. PostgreSql性能测试

    # PostgreSql性能测试 ## 1. 环境+ 版本:9.4.9+ 系统:OS X 10.11.5+ CPU:Core i5 2.7G+ 内存:16G+ 硬盘:256G SSD ## 2. 测试 ...

随机推荐

  1. MUI使用vue示例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. 什么情况下要加上【javascript:】

    你知道http:// https:// mailto: tencent://这种东西么?这叫url schema,通常是在a的href里的.但a的href里面是不能加脚本的,所以浏览器就创造了一个叫j ...

  3. Python爬虫笔记【一】模拟用户访问之表单处理(3)

    学习的课本为<python网络数据采集>,大部分代码来此此书. 大多数网页表单都是由一些HTML 字段.一个提交按钮.一个在表单处理完之后跳转的“执行结果”(表单属性action 的值)页 ...

  4. C# 制作ActiveX控件并添加到网页

    1.创建ActiveX控件——按钮 2.定义一个接口,并在控件中实现 3.部署安装 4.CAB打包 5.添加到网页中进行测试 一. 创建ActiveX控件——按钮 1.新建一个Window窗体控件库项 ...

  5. groups 用户所归属的用户组查询

    groups 用法很简单,就是查询用户所归属哪个或哪些用户组: 语法格式:  groups  用户名 实例: [beinan@localhost ~]$ groups beinan  注:查询bein ...

  6. mybatis学习:mybatis的注解开发和编写dao实现类的方式入门

    一.使用注解则不需要创建映射配置文件:即xxxDao.xml javaBean为什么要实现Serializable接口? Java的"对象序列化"能让你将一个实现了Serializ ...

  7. zoj 1001 python起步

    /*赶角还是挺好的....*/ import sys for line in sys.stdin: a=line.split() print int(a[0])+int(a[1])

  8. applyMiddleware源码中的闭包

    闭包都是个老掉牙的话题了,这次又提起,是因为重看Redux源码时发现了applyMiddleware里的用法很巧妙.我们先看一个简单的例子. var a = (num) => num + 1 v ...

  9. eclipse配置mybatis xml文件自动提示

    如果使用eclipse中,再写mybatis的xml文件的时候,没有提示,用“Alt+/”,不能把代码用快捷键敲出来,通过下面这个方法,可以解决. 1.下载一个文件,找一个专门的地方保存,配置自动提示 ...

  10. netbeans生成的maven工程没有web.xml文件 如何新建

    使用netbeans生成的maven工程没有web.xml 需要自己新建 步骤: 下一步,完成