sql - 使用许多键在 PostgreSQL 中透视表
问题描述
我正在旋转表格 , 的表格,id
其中有多种类型的键 (130)。有太多键来显式枚举调用中的类型,或者按照交叉表文档中的建议写出函数定义:key
value
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 是一种描述性语言,您需要告诉数据库您想要结果集中的哪些列,以便它能够理解您的需求,并构建正确的查询计划。
典型的解决方案涉及动态SQL:即使用查询生成实际的查询字符串,然后执行它。这是一个额外的间接级别,这可能具有一定的挑战性。
一种中途解决方案是 JSON。如果您可以接受所有键/对值都聚合在 JSON 对象的单个列中的结果,您可以执行以下操作:
select id, json_object_agg(key, value) obj
from mytable
group by id
推荐阅读
- mysql - 在 MySQL 中使用 SELECT 和 SUB SELECT
- spring-webflux - API 路由 SPA
- angularjs - ng-map (googlemaps) 和 usergrid 后端的问题
- eclipse - 2.12 以外的 Scala 编译器无法在 Eclipse 中运行
- odoo-8 - 下单时 Receipt Ref 如何获取其值
- android - 活动中的 Snackbar 错误 => android.view.InflateException:
只能与有效的 ViewGroup 根和 attachToRoot=true 一起使用 - html - 背景来源:填充框不起作用?
- android - 我的桌子在课堂上是满的,在其他的时候是空的
- jquery - 分别获取每个输入的值jQuery
- visual-studio-2017 - 安装后缺少 HP Fortify 菜单