【原创】PostgreSQL 给数组排序

PostgreSQL支持数组,但是没有对数据内部元素进行排序的一个函数。今天我分别用PLPGSQL和PLPYTHONU写了一个。示例表结构:t_girl=#\dtest_array;&n..

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 mst_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 mst_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 = c1elif f_order.lower() == ‘desc’:    c1.sort(reverse=True)    result = c1else:    passreturn 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;

本文出自 “上帝,咱们不见不散!” 博客,请务必保留此出处

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1941800.html

(0)
上一篇 2025年2月23日 00:44:04
下一篇 2025年2月23日 00:44:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • sql中and的用法

    AND运算符用于组合多个条件,仅当所有条件都为TRUE时才返回TRUE。语法:WHERE condition1 AND condition2 AND …,其中condition是评估为TRUE或FALSE的条件。例如,要获取年龄…

    2025年2月23日
    100
  • sql怎么查看视图表

    要查看视图表,可以使用以下步骤:使用 SELECT 语句获取视图中的数据。使用 DESC 语句查看视图的架构。使用 EXPLAIN 语句分析视图的执行计划。使用 DBMS 提供的 GUI 工具浏览视图表。使用特定于语言的命令(如嵌入式 SQ…

    2025年2月23日
    100
  • sql中如何插入数据

    在 SQL 中插入数据,使用 INSERT INTO 语句,可通过以下步骤实现:准备 INSERT INTO 语句,指定表名和列名(可选)。使用占位符或绑定变量插入值,防止 SQL 注入。使用 execute() 或 exec() 方法(P…

    2025年2月23日
    100
  • sql脚本怎么执行

    执行 SQL 脚本的方法有五种:使用命令行界面 (CLI)、使用第三方工具、通过代码执行、使用 Web 界面和使用 DBA 工具。 SQL 脚本的执行方法 执行 SQL 脚本涉及使用数据库管理系统 (DBMS)。以下是一些常见的执行 SQL…

    2025年2月23日
    100
  • sql如何断开数据库的使用

    可以使用 SQL 语句断开数据库连接,包括:1. CLOSE 语句:立即关闭指定连接;2. DISCONNECT 语句:关闭连接并释放资源;3. END TRANSACTION 语句:提交/回滚事务并断开连接;4. EXIT 语句:终止脚本…

    2025年2月23日
    100
  • 如何将 AWS Glue 爬网程序与 Amazon Athena 结合使用

    作为数据专业人员,您需要处理来自各种来源的大量数据。这可能会给数据管理和分析带来挑战。幸运的是,两项 AWS 服务可以提供帮助:AWS Glue 和 Amazon Athena。 当您集成这些服务时,您就释放了 AWS 生态系统中的数据发现…

    2025年2月23日
    100
  • SQL删除行如何进行测试

    为了有效测试 SQL 删除操作,需采取以下策略:单元测试:验证 DELETE 语句的语法和条件准确性,使用模拟数据和测试数据库。集成测试:将 DELETE 语句与其他数据库操作结合,验证其在整个系统中的正确性。负面测试:测试异常情况,如删除…

    2025年2月23日
    100
  • SQL删除行如何控制删除速度

    大规模数据库删除时,采用分批次删除策略,分批删除数据以控制速度。具体实施方法包括:分批次删除、事务控制、并发删除,同时需注意常见问题如数据库锁和性能瓶颈,并优化索引、批量操作和分表分库,确保安全性和高效性。 数据库屠龙技:优雅地控制 SQL…

    2025年2月23日
    100
  • 怎么用win7编程

    在 Windows 7 上编程需要使用以下工具:Microsoft Visual Studio、Notepad++ 或命令提示符,并选择 C#、C++、VB.NET 或 Python 等编程语言。需要创建一个新项目,使用选定的语言编写代码,…

    2025年2月23日
    100
  • win7怎么制作脚本

    在 Windows 7 中创建脚本需要以下步骤:使用文本编辑器编写脚本,内容使用 WSH 脚本语言,如 VBScript 或 JScript。保存文件为 .vbs 或 .js 格式。双击脚本文件或使用 “cscript&#822…

    2025年2月23日
    100

发表回复

登录后才能评论