ITPub博客

首页 > 数据库 > 数据库开发技术 > PostgreSQL 16新特性之数组抽样和随机排序

PostgreSQL 16新特性之数组抽样和随机排序

原创 数据库开发技术 作者:BUAA_dxy 时间:2023-06-12 20:00:00 0 删除 编辑

PostgreSQL 支持内置的数组类型,包括多维数组。不仅如此,PostgreSQL 还提供了许多操作和处理数组类型的函数。

PostgreSQL 16 又增加了 2 个新的数组函数:

  • array_sample(),返回随机抽取的 N 个数组元素;

  • array_shuffle(),将数组中的元素随机排序。

接下来我们看几个示例。

数组随机抽样

以下示例每次返回 1 到 10 之间的一个随机数字:

SELECT array_sample(ARRAY[1,2,3,4,5,6,7,8,9,10], 1);

array_sample|
------------+
{2} |

array_sample() 函数包含两个参数,第一个参数是一个数组,第二个参数是抽样结果的个数。该函数的返回类型仍然是数组。

以下示例每次返回 3 个随机数字:

SELECT array_sample(ARRAY[1,2,3,4,5,6,7,8,9,10], 3);

array_sample|
------------+
{9,1,3} |

对于多维数组,抽样操作基于第一个维度返回元素。例如:

SELECT array_sample(ARRAY[[1,2],[3,4],[5,6],[7,8],[9,10]], 3);
array_sample |
--------------------+
{{3,4},{1,2},{9,10}}|

array_sample() 函数的第二个参数不能大于数组的第一个维度的长度,否则将会返回错误。例如:

SELECT array_sample(ARRAY[[1,2],[3,4],[5,6],[7,8],[9,10]], 6);
SQL 错误 [22023]: 错误: sample size must be between 0 and 5

数组随机排序

array_shuffle() 函数可以基于数组的第一个维度将元素进行随机排序(洗牌)。例如:

SELECT array_shuffle(ARRAY['a','b','c','d','e','f']);
array_shuffle|
-------------+
{f,c,e,b,a,d}|

SELECT array_shuffle(ARRAY[['a','b'],['c','d'],['e','f']]);
array_shuffle |
-------------------+
{{c,d},{a,b},{e,f}}|

除了第一个维度之外,其他维度上的元素顺序仍然保存不变。

原文作者:SQL编程思想;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
《SQL编程思想》作者,专注于数据库领域知识的分享。

注册时间:2021-08-26

  • 博文量
    443
  • 访问量
    546930