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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 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)

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

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

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

postgres=# select 5!;
 ?column? 
----------
      120
(1 row)

得到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)
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
DataWorks Java 关系型数据库
DataWorks常见问题之将预警信息发送至邮箱
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
34 1
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版标准版计算节点规格详解
PolarDB MySQL版标准版计算节点规格详解
117 1
|
5月前
|
缓存 关系型数据库 数据库
PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
从零开始学PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
446 2
|
4月前
|
SQL 关系型数据库 数据库
postgresql数据库修改参数的方式
在PostgreSQL数据库中,你可以通过多种方式修改数据库参数,以更改其行为。以下是一些常见的修改数据库参数的方式: 1. **通过配置文件修改(postgresql.conf):** PostgreSQL的配置文件是 `postgresql.conf`。你可以直接编辑该文件,找到要修改的参数,修改其值,然后重新启动PostgreSQL服务以使更改生效。 通常,`postgresql.conf` 文件位于 PostgreSQL 数据目录下。修改完毕后,确保重新启动 PostgreSQL 服务。 2. **使用 ALTER SYSTEM 命令:** PostgreSQL
101 1
|
2月前
|
关系型数据库 Java 分布式数据库
PolarDB for PostgreSQL参数问题之参数删除失败如何解决
PolarDB for PostgreSQL是基于PostgreSQL开发的一款云原生关系型数据库服务,它提供了高性能、高可用性和弹性扩展的特性;本合集将围绕PolarDB(pg)的部署、管理和优化提供指导,以及常见问题的排查和解决办法。
|
3月前
|
关系型数据库 PostgreSQL
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
|
4月前
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
45 0
|
9月前
|
关系型数据库 Java 数据库连接
PostgreSQL 14中连接参数target_session_attrs增强
PostgreSQL 14中连接参数target_session_attrs增强
98 0
|
9月前
|
存储 Cloud Native 关系型数据库
阿里云最新产品手册——阿里云核心产品——云原生关系型数据库PolarDB——计算与存储分离
阿里云最新产品手册——阿里云核心产品——云原生关系型数据库PolarDB——计算与存储分离自制脑图
217 1
|
10月前
|
SQL 弹性计算 Kubernetes
实践教程之如何使用PolarDB-X参数模板
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您如何使用PolarDB-X参数模板。

相关产品

  • 云原生数据库 PolarDB