PostgreSQL 如何计算可变参数中有没有重复参数

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介:

PostgreSQL 如何计算可变参数中有没有重复参数。
有一个计算排列组合的算法需求,需要知道参数中是否有重复值。目的是过滤掉重复值。
实现方法很简单,需要创建支持可变参数的函数,如下:

postgres=# CREATE or replace FUNCTION has_dupli_val(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=# select has_dupli_val(1,2,null,1);
 has_dupli_val 
---------------
 t
(1 row)

postgres=# select has_dupli_val(1,2,null,3);
 has_dupli_val 
---------------
 f
(1 row)

postgres=# select has_dupli_val(1,2,null,null);
 has_dupli_val 
---------------
 f
(1 row)

postgres=# select has_dupli_val(null,null);
 has_dupli_val 
---------------
 f
(1 row)
AI 代码解读

还蛮简单的,用到了聚合判断,可变参数使用variadic 标记的数组来定义。
这个函数可以用来生成排列组合。
例子:

postgres=# create table t(id int);
CREATE TABLE
postgres=# insert into t select generate_series(1,5);;
INSERT 0 5
AI 代码解读

对1,2,3,4,5这5个值进行排列组合,得出组合结果。
排列组合的可能性有5的阶乘种。即120。

postgres=# select 5!;
 ?column? 
----------
      120
(1 row)
AI 代码解读

得到1,2,3,4,5的排列组合的方法:

postgres=# select t1.id,t2.id,t3.id,t4.id,t5.id from t t1,t t2,t t3,t t4,t t5 where not has_dupli_val(t1.id,t2.id,t3.id,t4.id,t5.id);
 id | id | id | id | id 
----+----+----+----+----
  1 |  2 |  3 |  4 |  5
  1 |  2 |  3 |  5 |  4
  1 |  2 |  4 |  3 |  5
  1 |  2 |  4 |  5 |  3
  1 |  2 |  5 |  3 |  4
  1 |  2 |  5 |  4 |  3
  1 |  3 |  2 |  4 |  5
  1 |  3 |  2 |  5 |  4
  1 |  3 |  4 |  2 |  5
  1 |  3 |  4 |  5 |  2
  1 |  3 |  5 |  2 |  4
  1 |  3 |  5 |  4 |  2
  1 |  4 |  2 |  3 |  5
  1 |  4 |  2 |  5 |  3
  1 |  4 |  3 |  2 |  5
  1 |  4 |  3 |  5 |  2
  1 |  4 |  5 |  2 |  3
  1 |  4 |  5 |  3 |  2
  1 |  5 |  2 |  3 |  4
  1 |  5 |  2 |  4 |  3
  1 |  5 |  3 |  2 |  4
  1 |  5 |  3 |  4 |  2
  1 |  5 |  4 |  2 |  3
  1 |  5 |  4 |  3 |  2
  2 |  1 |  3 |  4 |  5
  2 |  1 |  3 |  5 |  4
  2 |  1 |  4 |  3 |  5
  2 |  1 |  4 |  5 |  3
  2 |  1 |  5 |  3 |  4
  2 |  1 |  5 |  4 |  3
  2 |  3 |  1 |  4 |  5
  2 |  3 |  1 |  5 |  4
  2 |  3 |  4 |  1 |  5
  2 |  3 |  4 |  5 |  1
  2 |  3 |  5 |  1 |  4
  2 |  3 |  5 |  4 |  1
  2 |  4 |  1 |  3 |  5
  2 |  4 |  1 |  5 |  3
  2 |  4 |  3 |  1 |  5
  2 |  4 |  3 |  5 |  1
  2 |  4 |  5 |  1 |  3
  2 |  4 |  5 |  3 |  1
  2 |  5 |  1 |  3 |  4
  2 |  5 |  1 |  4 |  3
  2 |  5 |  3 |  1 |  4
  2 |  5 |  3 |  4 |  1
  2 |  5 |  4 |  1 |  3
  2 |  5 |  4 |  3 |  1
  3 |  1 |  2 |  4 |  5
  3 |  1 |  2 |  5 |  4
  3 |  1 |  4 |  2 |  5
  3 |  1 |  4 |  5 |  2
  3 |  1 |  5 |  2 |  4
  3 |  1 |  5 |  4 |  2
  3 |  2 |  1 |  4 |  5
  3 |  2 |  1 |  5 |  4
  3 |  2 |  4 |  1 |  5
  3 |  2 |  4 |  5 |  1
  3 |  2 |  5 |  1 |  4
  3 |  2 |  5 |  4 |  1
  3 |  4 |  1 |  2 |  5
  3 |  4 |  1 |  5 |  2
  3 |  4 |  2 |  1 |  5
  3 |  4 |  2 |  5 |  1
  3 |  4 |  5 |  1 |  2
  3 |  4 |  5 |  2 |  1
  3 |  5 |  1 |  2 |  4
  3 |  5 |  1 |  4 |  2
  3 |  5 |  2 |  1 |  4
  3 |  5 |  2 |  4 |  1
  3 |  5 |  4 |  1 |  2
  3 |  5 |  4 |  2 |  1
  4 |  1 |  2 |  3 |  5
  4 |  1 |  2 |  5 |  3
  4 |  1 |  3 |  2 |  5
  4 |  1 |  3 |  5 |  2
  4 |  1 |  5 |  2 |  3
  4 |  1 |  5 |  3 |  2
  4 |  2 |  1 |  3 |  5
  4 |  2 |  1 |  5 |  3
  4 |  2 |  3 |  1 |  5
  4 |  2 |  3 |  5 |  1
  4 |  2 |  5 |  1 |  3
  4 |  2 |  5 |  3 |  1
  4 |  3 |  1 |  2 |  5
  4 |  3 |  1 |  5 |  2
  4 |  3 |  2 |  1 |  5
  4 |  3 |  2 |  5 |  1
  4 |  3 |  5 |  1 |  2
  4 |  3 |  5 |  2 |  1
  4 |  5 |  1 |  2 |  3
  4 |  5 |  1 |  3 |  2
  4 |  5 |  2 |  1 |  3
  4 |  5 |  2 |  3 |  1
  4 |  5 |  3 |  1 |  2
  4 |  5 |  3 |  2 |  1
  5 |  1 |  2 |  3 |  4
  5 |  1 |  2 |  4 |  3
  5 |  1 |  3 |  2 |  4
  5 |  1 |  3 |  4 |  2
  5 |  1 |  4 |  2 |  3
  5 |  1 |  4 |  3 |  2
  5 |  2 |  1 |  3 |  4
  5 |  2 |  1 |  4 |  3
  5 |  2 |  3 |  1 |  4
  5 |  2 |  3 |  4 |  1
  5 |  2 |  4 |  1 |  3
  5 |  2 |  4 |  3 |  1
  5 |  3 |  1 |  2 |  4
  5 |  3 |  1 |  4 |  2
  5 |  3 |  2 |  1 |  4
  5 |  3 |  2 |  4 |  1
  5 |  3 |  4 |  1 |  2
  5 |  3 |  4 |  2 |  1
  5 |  4 |  1 |  2 |  3
  5 |  4 |  1 |  3 |  2
  5 |  4 |  2 |  1 |  3
  5 |  4 |  2 |  3 |  1
  5 |  4 |  3 |  1 |  2
  5 |  4 |  3 |  2 |  1
(120 rows)
AI 代码解读
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
打赏
0
0
0
0
20690
分享
相关文章
PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
从零开始学PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
648 2
【赵渝强老师】PostgreSQL的参数文件
PostgreSQL数据库的四个主要参数文件包括:`postgresql.conf`(主要配置文件)、`pg_hba.conf`(访问控制文件)、`pg_ident.conf`(用户映射文件)和`postgresql.auto.conf`(自动保存修改后的参数)。视频讲解和详细说明帮助理解各文件的作用。
176 19
PostgreSQL计算两个点之间的距离
PostgreSQL计算两个点之间的距离
598 60
postgresql数据库修改参数的方式
在PostgreSQL数据库中,你可以通过多种方式修改数据库参数,以更改其行为。以下是一些常见的修改数据库参数的方式: 1. **通过配置文件修改(postgresql.conf):** PostgreSQL的配置文件是 `postgresql.conf`。你可以直接编辑该文件,找到要修改的参数,修改其值,然后重新启动PostgreSQL服务以使更改生效。 通常,`postgresql.conf` 文件位于 PostgreSQL 数据目录下。修改完毕后,确保重新启动 PostgreSQL 服务。 2. **使用 ALTER SYSTEM 命令:** PostgreSQL
583 2
实时计算 Flink版产品使用问题之在使用FlinkCDC与PostgreSQL进行集成时,该如何配置参数
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用问题之在使用FlinkCDC与PostgreSQL进行集成时,该如何配置参数
在 PostgreSQL 中,解决图片二进制数据,由于bytea_output参数问题导致显示不正常的问题。
在 PostgreSQL 中,解决图片二进制数据,由于bytea_output参数问题导致显示不正常的问题。
PolarDB for PostgreSQL参数问题之参数删除失败如何解决
PolarDB for PostgreSQL是基于PostgreSQL开发的一款云原生关系型数据库服务,它提供了高性能、高可用性和弹性扩展的特性;本合集将围绕PolarDB(pg)的部署、管理和优化提供指导,以及常见问题的排查和解决办法。
PostgreSQL 的哪些参数不能通过ALTER SYSTEM SET 修改
在 PostgreSQL 中,有一些参数是不能通过 `ALTER SYSTEM SET` 语句进行动态修改的,这些参数通常需要在 PostgreSQL 的配置文件中进行手动修改。以下是一些不能通过 `ALTER SYSTEM SET` 修改的常见参数: 1. **track_activities** 2. **track_counts** 3. **track_io_timing** 4. **track_functions** 5. **track_activity_query_size** 6. **track_commit_timestamp** 7. **shared_preload
184 0
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
128 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等