You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Presto SQL中将列转换为数组

在Presto SQL中实现列转数组的方法

在Presto里实现你Postgres示例中的列转数组功能,最常用也最简洁的方式是使用**array_agg()**聚合函数,它的作用就是将指定列的所有值收集成一个数组。

对应你示例的改写查询

直接把Postgres的写法替换成array_agg()即可,效果完全一致:

WITH dataset AS (
    SELECT '1' as a UNION SELECT '2' as a UNION SELECT '3' as a
)
SELECT array_agg(a) AS array_result;

这个查询返回的结果和你Postgres示例类似(注意:UNION本身不保证顺序,如果需要固定数组内元素的顺序,可以在array_agg里加上ORDER BY):

array_result
['1','2','3']

进阶:指定数组元素顺序

如果希望数组里的元素按特定顺序排列,可以在array_agg中添加排序逻辑:

WITH dataset AS (
    SELECT '1' as a UNION SELECT '2' as a UNION SELECT '3' as a
)
SELECT array_agg(a ORDER BY a DESC) AS array_result;

返回结果会是:['3','2','1']

和Postgres写法的对比

Postgres里的array(select a from dataset)是通过子查询构造数组的语法,而Presto中没有完全一致的语法,但array_agg()是语义等价的标准实现,而且在分组场景下更灵活——比如如果需要按某个字段分组,再将另一列转成数组,array_agg()可以直接配合GROUP BY使用:

WITH orders AS (
    SELECT 'user1' AS user_id, 'order1' AS order_id
    UNION SELECT 'user1' AS user_id, 'order2' AS order_id
    UNION SELECT 'user2' AS user_id, 'order3' AS order_id
)
SELECT user_id, array_agg(order_id) AS user_orders
FROM orders
GROUP BY user_id;

这个查询会返回每个用户对应的所有订单ID数组。

内容的提问来源于stack exchange,提问作者Dmytro Serdiuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:37:52