PostgreSQL里实现计算多个数字的排列组合

这篇具有很好参考价值的文章主要介绍了PostgreSQL里实现计算多个数字的排列组合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在进行排列组合的时候,每一次需要知道是否有重复的值,并过滤出已经排列过的值。这个可以创建支持可变参数的函数来实现。下边的函数用到了聚合判断,并且可变参数使用variadic标记的数组。

postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:48:02)=# CREATE or replace FUNCTION has_repeat_values(VARIADIC arr int[]) RETURNS boolean AS $$
  select count(distinct val)<>count(*) dist_val from unnest($1) t(val) where val is not null;
$$ language sql strict;
CREATE FUNCTION
postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:48:10)=# select has_repeat_values(1,2,3);
+-------------------+
| has_repeat_values |
+-------------------+
| f                 |
+-------------------+
(1 row)

postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:48:22)=# select has_repeat_values(1,2,3,3);
+-------------------+
| has_repeat_values |
+-------------------+
| t                 |
+-------------------+
(1 row)

postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:56:47)=# select has_repeat_values(1,2,3,null);
+-------------------+
| has_repeat_values |
+-------------------+
| f                 |
+-------------------+
(1 row)

postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:58:20)=# select has_repeat_values(1,2,3,null,null);
+-------------------+
| has_repeat_values |
+-------------------+
| f                 |
+-------------------+
(1 row)

PostgreSQL里实现计算多个数字的排列组合,PostgreSQL,postgresql,数据库

然后是如何使用这个函数结合查询语句对一组数据进行排列组合。

先创建一个测试的表,里边存放要进行排列组合的数据。

postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:52:26)=# create table test_data(id int);
CREATE TABLE
postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:52:27)=# insert into test_data select generate_series(1,4);
INSERT 0 4
postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:52:40)=# select * from test_data;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
(4 rows)

PostgreSQL里实现计算多个数字的排列组合,PostgreSQL,postgresql,数据库


例如,一张表里有1234这四个值。想使用四个值做排列组合。
根据4的阶乘可以得到,总共应该有24种,阶乘可以使用factorial函数。

postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:52:46)=# select factorial(4);
+-----------+
| factorial |
+-----------+
|        24 |
+-----------+
(1 row)

PostgreSQL里实现计算多个数字的排列组合,PostgreSQL,postgresql,数据库


然后下边使用创建的判断是否有重复数据的函数以及使用SQL实现获取所有的排列组合。


postgres<16.1>(ConnAs[postgres]:PID[188277] 2024-02-19/08:56:16)=# select t1.id,t2.id,t3.id  from test_data t1,test_data t2,test_data t3,test_data t4 where not has_repeat_values(t1.id,t2.id,t3.id,t4.id);
+----+----+----+
| id | id | id |
+----+----+----+
|  1 |  2 |  3 |
|  1 |  2 |  4 |
|  1 |  3 |  2 |
|  1 |  3 |  4 |
|  1 |  4 |  2 |
|  1 |  4 |  3 |
|  2 |  1 |  3 |
|  2 |  1 |  4 |
|  2 |  3 |  1 |
|  2 |  3 |  4 |
|  2 |  4 |  1 |
|  2 |  4 |  3 |
|  3 |  1 |  2 |
|  3 |  1 |  4 |
|  3 |  2 |  1 |
|  3 |  2 |  4 |
|  3 |  4 |  1 |
|  3 |  4 |  2 |
|  4 |  1 |  2 |
|  4 |  1 |  3 |
|  4 |  2 |  1 |
|  4 |  2 |  3 |
|  4 |  3 |  1 |
|  4 |  3 |  2 |
+----+----+----+
(24 rows)

PostgreSQL里实现计算多个数字的排列组合,PostgreSQL,postgresql,数据库文章来源地址https://www.toymoban.com/news/detail-831585.html

到了这里,关于PostgreSQL里实现计算多个数字的排列组合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 递归实现 组合问题+排列问题(DFS)

    目录 递归实现排列型枚举 递归实现排列类型枚举 II  递归实现组合型枚举 递归实现组合型枚举 II 递归实现指数型枚举 递归实现指数型枚举 II 递归不是循环,递归利用了系统栈,只要是函数都会被系统管理。当执行到函数地址入口时就会为函数在系统栈上分配一块内存。当

    2024年02月15日
    浏览(30)
  • PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享

    通过使用 PostgreSQL 的 C 函数接口,我们可以编写用 C 语言实现的函数,并将其集成到数据库中。这些函数可以在 SQL 查询中像其他内置函数一样被调用,从而扩展 PostgreSQL 的功能。 C 函数在某些情况下可以提供比 SQL 函数更高的执行效率,因为它们可以直接访问底层系统资源并

    2024年02月15日
    浏览(29)
  • 设置VsCode 将打开的多个文件分行(栏)排列,实现全部显示

    目录 1. 前言 2. 设置VsCode 多文件分行(栏)排列显示         主流编程IDE几乎都有排列切换选择所要查看的文件功能,如下为Visual Studio 2022的该功能界面: 图 1   图 2 当在Visual Studio 2022打开很多文件时,可以按照图1、图2所示找到自己想要的文件,这在编程开发中是很常见的行

    2024年02月13日
    浏览(30)
  • [pgrx开发postgresql数据库扩展]4.基本计算函数的编写与性能对比

    再次声明: 并不是所有场景都需要(或者适合)用rust来写的,绝大部分操作数据库的功能和计算,用SQL就已经足够了! 本系列中,所有的案例,仅用于说明pgrx的能力,而并非是说这样做比用SQL更合适。反之:对于操作数据库本身的部分,大部分能用SQL来实现的东西,都比做

    2024年02月01日
    浏览(71)
  • 将vsCode 打开的多个文件分行(栏)排列,实现全部显示,便于切换文件

    目录 1. 前言 2. 设置VsCode 多文件分行(栏)排列显示         主流编程IDE几乎都有排列切换选择所要查看的文件功能,如下为Visual Studio 2022的该功能界面: 图 1   图 2 当在Visual Studio 2022打开很多文件时,可以按照图1、图2所示找到自己想要的文件,这在编程开发中是很常见的行

    2024年02月13日
    浏览(26)
  • 利用OGG实现PostgreSQL实时同步

    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前服务于工业互联网 擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优

    2024年02月04日
    浏览(30)
  • PostgreSQL 数据库实现公网远程连接

    PostgreSQL是一个功能非常强大的关系型数据库管理系统(RDBMS),下面简单几步通过cpolar 内网穿透工具即可现实本地postgreSQL 远程访问! 1. 安装postgreSQL 进入官网下载界面,我们下载自己需求的版本,这里选择windows 为例:https://www.postgresql.org/download/ 下载后运行安装文件,进行一步步安

    2024年02月08日
    浏览(37)
  • PostgreSQL--实现数据库备份恢复详细教学

    前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:RodmaChen 数据库备份恢复功能是每个产品所需的,以下是简单的脚本案例,满足了大部分备份和恢复需求 关于备份恢复命令可参考这篇文章:PostgreSQL – 备份恢复命令 一. 数据库备份 我创建了back-sq

    2024年02月15日
    浏览(39)
  • PostgreSQL数据库实现表字段的自增

    在使用MySQL的时候,创建表结构时可以通过 AUTO_INCREMENT 来指定主键是否自增。在PostgreSQL数据库中,使用序列来实现字段的自增。 PostgreSQL序列是一种特殊的用于生产整数序列数据库对象。序列通常用于主键列,与mysql的AUTO_INCREMENT 概念类似。 PostgreSQL 提供三种序列伪类

    2024年02月04日
    浏览(74)
  • PostgreSQL基于Citus实现的分布式集群

    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前服务于工业互联网 擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优

    2024年02月04日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包