如何解决用许多键在PostgreSQL中旋转表
我正在透视表id
,key
,value
形式的表,其中有许多类型的键(130)。太多的键无法明确枚举crosstab()
调用中的类型,或按照交叉表文档中的建议写出crosstab_N
函数定义:
row_name TEXT,category_1 TEXT,category_2 TEXT,.
.
.
category_N TEXT
);
如何将此表转换为ID为category_1,category_2,... category_130的宽格式?我发现很难相信如果不显式枚举列类型就无法在SQL中透视此类表。例如,在R中,使用tidyverse
包,我只会调用dataframe %>% spread(key=key,value=value)
解决方法
我很难相信如果不明确枚举列类型就无法在SQL中透视此类表。
SQL查询返回一组固定的列。 SQL是一种描述性语言,您需要告诉数据库结果集中需要哪些列,以便它可以理解您的要求并建立正确的查询计划。
典型的解决方案涉及 dynamic SQL:即,使用查询生成实际的查询字符串,然后 执行它。这是间接的附加级别,这在某种程度上可能具有挑战性。
一个中途解决方案是JSON。如果您可以接受将所有键/对值汇总到JSON对象的单个列中的结果,则可以执行以下操作:
select id,json_object_agg(key,value) obj
from mytable
group by id
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。