array_top_n
对给定数组的元素按自然降序排序,并返回数组中的前 n 个元素。如果 n 大于输入数组的长度,则返回数组的长度将与输入相同,而不是 n。
语法
array_top_n(array, count)
参数
-
array:要从中提取前 n 个元素的数组。该数组可以包含 StarRocks 支持的任何可比较数据类型的元素。 -
count:要返回的前 n 个元素的数量。必须是非负整数。
返回值
返回一个包含输入数组中前 n 个元素的数组,按降序排序。返回值与输入数组的数据类型都是相同的 ARRAY 类型。
使用说明
- 元素根据其自然顺序按降序排序。
- 如果
count为 0 或负数,则返回空数组。 - 如果
count大于数组长度,则返回整个数组,按降序排序。 - 如果输入的
array或count为 NULL,则结果为 NULL。 - 数组中的 NULL 元素被视为比任何非 NULL 值小,如果包含在结果中,将出现在末尾。
示例
示例 1:从整数数组中获取前 3 个元素。
mysql> SELECT array_top_n([1, 100, 2, 5, 3], 3);
+-----------------------------------+
| array_top_n([1,100,2,5,3], 3) |
+-----------------------------------+
| [100,5,3] |
+-----------------------------------+
示例 2:从包含两个整数的数组中获取前 5 个元素(count 大于数组长度)。
mysql> SELECT array_top_n([1, 100], 5);
+--------------------------+
| array_top_n([1,100], 5) |
+--------------------------+
| [100,1] |
+--------------------------+
示例 3:从字符串数组中获取前 3 个元素。
mysql> SELECT array_top_n(['a', 'zzz', 'zz', 'b', 'g', 'f'], 3);
+----------------------------------------------------+
| array_top_n(['a','zzz','zz','b','g','f'], 3) |
+----------------------------------------------------+
| ['zzz','zz','g'] |
+----------------------------------------------------+
示例 4:当 count 为 0 时调用函数。
mysql> SELECT array_top_n([1, 2, 3], 0);
+--------------------------+
| array_top_n([1,2,3], 0) |
+--------------------------+
| [] |
+--------------------------+
示例 5:从包含 NULL 元素的整数数组中获取前 3 个元素。
mysql> SELECT array_top_n([1, NULL, 3, 2], 3);
+---------------------------------+
| array_top_n([1,null,3,2], 3) |
+---------------------------------+
| [3,2,1] |
+---------------------------------+
示例 6:使用表数据调用函数。
mysql> CREATE TABLE IF NOT EXISTS test (id INT, arr ARRAY<INT>) PROPERTIES ("replication_num"="1");
mysql> INSERT INTO test VALUES (1, [5, 2, 8, 1, 9]), (2, [10, 3, 7]);
mysql> SELECT id, array_top_n(arr, 2) FROM test;
+------+----------------------+
| id | array_top_n(arr, 2) |
+------+----------------------+
| 1 | [9,8] |
| 2 | [10,7] |
+------+----------------------+