sql - 如何在 Presto 中将一行拆分为多列?
问题描述
我有一个如下表,其中包含 A(字符串)和 B ROW(int)列:
A B
a [1,2,3]
b [0,0,5]
c [3,1,4]
我想以这种方式将第二列(包含 ROW 类型)拆分为多列:
A B1 B2 B3
a 1 2 3
b 0 0 5
c 3 1 4
我相信这可以通过 SQL 语句来完成,但 unnest 会创建新行(我不想要)并且split_part
不适用于该ROW
类型。我怎样才能做到这一点?
解决方案
假设 columnB
是一种ROW
类型,您可以在SELECT statements.*
ROW
中使用operator 。
这种语法存在于 Trino(以前称为 PrestoSQL)中,但不存在于 PrestoDB 中,因此它取决于您使用的版本来使其工作。如果你还没有的话,我建议你还是搬到 Trino。
复制粘贴:
WITH t(a, b) AS (
VALUES
('a', ROW(1,2,3)),
('b', ROW(0,0,5)),
('c', ROW(3,1,4))
)
SELECT
a as A,
t.b.* AS (B1, B2, B3)
FROM t;
执行:
trino> WITH t(a, b) AS (
-> VALUES
-> ('a', ROW(1,2,3)),
-> ('b', ROW(0,0,5)),
-> ('c', ROW(3,1,4))
-> )
-> SELECT
-> a as A,
-> t.b.* AS (B1, B2, B3)
-> FROM t;
A | B1 | B2 | B3
---+----+----+----
a | 1 | 2 | 3
b | 0 | 0 | 5
c | 3 | 1 | 4
(3 rows)
推荐阅读
- flutter - Flutter:如何在列表视图构建器中使刚刚选择的值为真
- python - 根据共享索引将一列添加到其他数据框中的所有列
- python - 如何从具有定义列索引的列表的列构建数据框,列表元素的包络作为列索引
- eclipse - Eclipse 无法在 Mac OS Big Sur 上启动并显示“无法创建 java 虚拟机”消息
- javascript - 无法使用 setState 更新对象属性
- jquery - 参数在 jquery 终端插件中不起作用
- android - 改造 Moshi 无法为 java.util.HashMap 创建@Body 转换器
- javascript - 打字稿:定义数组
内部对象 - r - 在新的 R 会话中附加大量包
- python - 如何将字典中的值相加