这是所需的输入和所需的输出.我不熟悉SQL或Presto中使用的术语,文档似乎指向使用,map_agg但我认为这里的问题是动态创建列,但是如果a, b, ...列可以知道且有限的话,这很奇怪.
我很高兴在SQL或Presto中了解它的正确功能,当然如果可行的话.优选地,以不涉及每个所需行=>列手动添加子句的方式.必须有一种方法可以自动执行此操作,或者通过提供值列表来过滤转换为标题的行(如'a'以下将如何移动为列标题)
table_a:
id | key | value
0 | 'a' | 1
1 | 'b' | 2
Run Code Online (Sandbox Code Playgroud)
然后成为desired:
id | 'a' | 'b'
0 1 2
Run Code Online (Sandbox Code Playgroud)
我能得到的最接近的是使用map_agg一组key: values可以在输出中一次拉出一组.然而,理想的解决方案是不必明确列出key我想要输出的每一个,而是爆炸或推出所有键kvs:
with subquery_A as (
select
id,
map_agg(A.key, A.value) as "kvs"
from A as a
group by 1
)
select
sub_a.id,
sub_a.kvs['a'],
sub_a.kvs['b']
from subquery_A as sub_a
Run Code Online (Sandbox Code Playgroud)
显然 Prestodb 尚未实现 PIVOT 功能。
你可以像下面这样做。它与您的解决方案类似,但可能更干净一些:
SELECT
id,
key['a'] AS A,
key['b'] AS B
FROM (
SELECT id, map_agg(key, value) key
FROM table_a
GROUP BY id
) temp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1764 次 |
| 最近记录: |