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

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}}|

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

猜你喜欢

转载自blog.csdn.net/horses/article/details/131168822