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. windows下 将tomcat做成服务,并于oracle后启动

    一.将tomcat做成服务 1.下载解压版的tomcat 6.*, 设置java.tomcat的环境(这个就不说了). 2.运行->cmd->到tomcat安装目录的bin目录: 3.运行 ...

  2. java swing+socket实现多人聊天程序

    swing+socket实现多人聊天程序 1.准备工作 先看效果: 客户端项目结构图: 服务端项目结构图: 2.运行原理 服务端 先开一个线程serverListerner,线程中开启一个Server ...

  3. 【arc075f】AtCoder Regular Contest 075 F - Mirrored

    题意 给定一个数x,问有多少个正整数y,使得rev(y)-y==x 其中rev(x)表示x按位翻转之后得到的数. x<=1e9 做法 首先通过打表发现,这个答案不会很大. 这就说明解相当地松弛. ...

  4. Cesium打包命令总结

    引言 Cesium实验室QQ群里有人在问Cesium的打包问题.我想干脆总结一下Cesium的打包命令特点,写篇文章,顺带庆祝一下1024程序员节.. Cesium的npm脚本有好多,其中几个和打包相 ...

  5. JQuery学习:jquery对象和js对象区别和转换

    JQuery对象与JS对象区别与转换 1.JQuery对象在操作时,更加方便 2.JQuery对象和js对象方法不通用 3.两者相互转换 *  jq -- > js:jq对象[索引]  或者  ...

  6. Docker(二)安装及常用命令

    1.安装 1.安装虚拟机VMWare 链接:https://pan.baidu.com/s/1Xl7ENUm2gapPOFs-iXHpRQ 提取码:eubm 2.下载centos,我下的是这个版本的 ...

  7. openCV抠图实验

    #include "pch.h" #include <opencv2/core/core.hpp> #include "opencv2/imgproc/img ...

  8. 微信网页授权demo2

    1.在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名.请注意,这里填写的是 ...

  9. 洛谷P3296 刺客信条

    题意: 给你一棵树,有两组01权值a[]和b[].n <= 700 你要构造一个自己到自己的映射,使得整棵树的形态不变,且映射后的a[]和映射之前的b[]中不同元素尽量少. 解: 发现这个整棵树 ...

  10. Centos Apache 多站点配置

    首先明白APACHE配置文件位置 /etc/httpd/ 系统会自动加载 "/etc/httpd/conf.d" 目录下面的 "*.conf"文件 创建多个 & ...