如何在 redshift 中将行连接并转置为列

2024-01-08

我有以下table1其独特的关键是type

type age
A     20
B     21
C     22

我有以下结果表。我想加入他们

type score
A     10
A     20
A     30
B     40 
B     50

以下转置形式。

type  age  score score score
A     20    10    20    30
B     21    40    50    na
C     22    na    na    na

有什么办法可以实现这一点吗?

select *
from table1
left join table2 usint(type)

没有转置行。 如果有人有意见请告诉我 谢谢


如果您事先不知道数量score每种类型的值,那么您需要一个完整的动态解决方案:

首先我们创建一个复合类型new_type根据最大数量score每种类型的值table2。然后,该复合类型用于命名最终查询中的列。

CREATE OR REPLACE PROCEDURE new_type() LANGUAGE plpgsql AS
$$
DECLARE
  column_txt text ;
BEGIN
  SELECT string_agg(' score' || id || ' integer', ',')
   INTO column_txt
    FROM
       (  SELECT count(*) AS count
           FROM table2
          GROUP BY type
          ORDER BY 1 DESC
          LIMIT 1
       ) AS a
   CROSS JOIN LATERAL generate_series(1, a.count :: integer) AS id ;
     
  EXECUTE 'DROP TYPE IF EXISTS new_type' ;
  EXECUTE 'CREATE TYPE new_type AS (' || column_txt || ')' ;
END ;
$$ ;

CALL new_type() ;

然后这个查询将提供预期的结果:

SELECT c.type, c.age
     , (jsonb_populate_record( NULL :: new_type
                             , jsonb_object_agg('score' || c.id, c.score ORDER BY c.score)
                             )).*
  FROM 
     ( SELECT a.type, a.age, b.score, row_number() OVER (PARTITION BY a.type, a.age ORDER BY b.score) AS id
         FROM table1 AS a
         LEFT JOIN table2 AS b
           ON a.type = b.type
     ) AS c
 GROUP BY c.type, c.age
 ORDER BY c.type, c.age

测试结果在.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 redshift 中将行连接并转置为列 的相关文章

  • 基于两个数据库表之间的数据比较创建oracle视图

    我有下表 我想创建视图以便descr O 以及对于常见的id isin两个表中的字段值 检查ratio字段并只取其中的行ratio字段值低 for descr O 如果 id isin 存在于一个表中但不存在于另一个表中 则获取这些行 双向
  • 如何选择前一行值? [复制]

    这个问题在这里已经有答案了 如何从 SELECT 语句的上一个结果行获取值 例如 如果我们有一个名为 cardevent 的表 并且有行 ID int Value Money 并且其中有一些行 ID Value 1 70 1 90 2 10
  • SQL Server 2008中与其他列的排序树

    我有一个使用它实现树的表层次结构ID column 样本数据 People Girls 1 Zoey 1 1 Kate 1 2 Monica 1 3 Boys 2 Mark 2 1 David 2 2 这是使用的顺序层次结构ID列作为排序列
  • 执行Insert命令并返回Sql中插入的Id

    我正在 MVC 4 中使用 C 将一些值插入到 SQL 表中 实际上 我想插入值并返回最后插入记录的 ID 我使用以下代码 public class MemberBasicData public int Id get set public
  • PostgreSQL 8.3 中不为空且唯一约束的增量字段

    我有一个表 项目 其中有一列 位置 位置具有唯一且非空的约束 为了在位置 x 插入新行 我首先尝试增加后续项目的位置 UPDATE items SET position position 1 WHERE position gt x 这会导致
  • count(distinct) over (partition by... 在 Oracle SQL 中不起作用

    我想数一下distinct day number过去 30 天 但是 distinct 函数不能与over 如果我删除distinct 它会给我总数day number but day number可以有很多重复的 所以这就是为什么我想添加
  • 在 ms-sql 中查找最近的位置

    我将这些参数发送给我的脚本 纬度 41 0186 经度 28 964701 它是示例 我想找到最近的位置的名称 这个怎么做 查询必须更改代码的位置 sql查询 SELECT Name FROM Location WHERE Latitude
  • 连接到 SQL Server 数据库 C#-WinForms

    我正在制作一个桌面应用程序 我希望用户必须登录才能充分使用该程序 我已经在 www winhost com 我的网站的托管位置 上创建了一个数据库 但现在我不知道该怎么办 我一直在使用 google 和 msdn 我想知道如何以编程方式将新
  • 关于数据库变更的通知

    我正在尝试一种场景 其中我想使用任何用户提交的更改来更新在不同 PC 上运行的桌面 UI 例如 Application1 安装在 PC1 PC2 和 PC3 上 假设所有 PC 都运行此应用程序 假设 PC1 上的用户 1 更改数据并提交到
  • 在 apex 中根据 2 种不同类型的用户进行自定义身份验证

    我有一种身份验证方案 目前仅验证用户是否在一个表中 即雇主表中 现在我希望这个身份验证方案来验证用户是雇主还是雇员 并且根据他们是雇主还是雇员 它应该将他们重定向到不同的页面 首先 我如何在身份验证脚本中包含第二个表 我最大的问题是 当员工
  • MySQL 错误 1264:列的值超出范围

    As I SETMySQL 中的 cust fax 表如下所示 cust fax integer 10 NOT NULL 然后我插入这样的值 INSERT INTO database values 3172978990 但随后它说 错误 1
  • SQL 选择另一列中具有最大值的列

    我有一个看起来像这样的表 Name Group Value A 1 0 B 1 2 C 1 5 D 2 6 E 2 0 F 3 3 我想选择每组中具有最大值的名称 例如 有 3 个组 因此结果将是 Name C because it has
  • 在函数中调用其他列的控制流程

    我正在尝试在给定条件的情况下连接到函数中的其他列 本质上 我想让数据框在给定条件的情况下从长到宽 其中一列中的这些值是NA相对于同一行中具有值的另一列 转动NAs转化为特定的数字 尽管分配的值必须是特定于列的 因此 如果2010 has N
  • 限制相同的数据条目

    我是 SQL 新手 我有两张桌子 一张放冰箱 一张放食物 一台冰箱只能存放 5 种食物 所以我想知道是否有办法限制食物表中只有 5 个相同的冰箱 ID 条目 没有直接的方法来强制执行这样的约束 我能想到的最好的是 有一个 冗余 列food
  • SQL:从多个表中获取 USER 表中用户记录的计数。最好的方法是什么?

    我有4个SQL Server 2008版本 表 1 USER to store user information Fields UserId UserName 2 FILES to store files uploaded by user
  • 从 LEFT OUTER JOIN 中删除重复项

    我的问题非常类似于限制 LEFT JOIN https stackoverflow com questions 757957 restricting a left join 有一个变体 假设我有一个表 SHOP 和另一个表 LOCATION
  • 从关键字后的文本中提取字符串

    我想从 SQL 字段中关键字后面的文本中提取内容 我有一个名为Description在表中 该字段的内容是 asdasf 关键字 狗 aeee 关键字 猫 ffffaa 关键词 狼 我想提取并保存 关键字 之后的文本 在本例中dog cat
  • SQL准备语句如何通过多个可能的菜单选择进行选择?

    所以我有 4 个菜单选择 产品 位置 课程类型和类别 所有这些都可以为空 使用 JSF 编程 但这应该与这个问题无关 因为它是一个 SQL 问题 菜单选择将向托管 bean 发送用户选择的变量 并使用准备好的语句使用用户选择的菜单中的信息
  • 如何在oracle sql查询中提取括号之间的字符串

    我正在尝试从字符串中提取括号之间的值 我怎样才能做到这一点 例如 我有这个字符串 Gupta Abha 01792 我想得到括号之间的结果 即 01792 我正在尝试编写这样的查询 select substr Gupta Abha 0179
  • 为什么这个触发器会失败?它说无效标识符

    CREATE MATERIALIZED VIEW ORDERS MV BUILD IMMEDIATE REFRESH COMPLETE ON DEMAND AS SELECT FROM ORDERS CREATE OR REPLACE TR

随机推荐

  • 从命令行运行 JAR 文件并指定类路径

    我整理了一个JAR http en wikipedia org wiki JAR 28file format 29文件并在清单中指定了主类 我使用了 EclipseExport功能 我的依赖项都在标记为的目录中lib 我似乎无法得到关于如何
  • 为什么我的 VBA 代码会抛出“无效的外部过程”错误?

    我一生都无法弄清楚为什么以下代码会抛出编译错误并显示消息 无效的外部过程 它突出显示下面带星号的行上的错误 Option Explicit Dim shtThisSheet As Worksheets Set shtThisSheet Ap
  • JavaScript:如何确定运行时(又称浏览器)的性能?

    我有一个 JavaScript 应用程序 它运行良好 但肯定需要一些内存 CPU 性能 它基于 Google 地图 所以基本上它在台式机 笔记本电脑上运行良好 iPad 也可以正常运行 但如今 对于所有这些不同的设备 较小的设备肯定会超载
  • Zend 表单 ajax 提交验证

    我目前正在尝试同时使用 ajax 和 zend validate 验证 zend 表单 让我解释一下 我的表单在 iframe fancybox 中弹出 提交后 我需要显示一条 谢谢 消息 关闭 iframe 并重定向用户 如果成功的话 我
  • Child_process 抛出错误:写入 EPIPE

    我只是练习一些关于child process the的node js代码link https nodejs org download release v5 2 0 docs api child process html child proc
  • Spring MVC Web 应用程序背后的 zuul 重定向问题

    我有一组 Spring Boot 1 3 3 和 Spring Cloud Brixton RC2 微服务 在 Zuul 后面运行 并且在重定向中重写我的 URL 时遇到问题 我的主要问题是我的网络应用程序位于 zuul 后面 并且在重定向
  • mysqldump 与 db 位于单独的文件中

    我正在编写一个单行命令 将所有数据库备份到各自的名称中 而不是使用将所有数据库转储到一个 sql 中 例如 db1 保存到 db1 sql db2 保存到 db2 sql 到目前为止 我收集了以下命令来检索所有数据库 mysql uunam
  • R ggplot2 aes 参数

    我有一个功能 vis function df x p1 lt ggplot df aes x geom line aes y v2 p1 我有一个数据框 df data frame v0 c 1 2 3 v1 c 2 3 4 v2 c 3
  • FFmpeg drawtext - 无法从文件加载字体[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我尝试使用 FFmpeg 在视频顶部添加简单的文本drawtext范围 每次我要这样做时 都会返回错误 无法从文件 arial ttf 加载字体 无法
  • 如何在 NSIS 中获取命令输出?

    我想知道如何在 NSIS 中获取 execwait 命令的输出 例如 如果我运行tree 我将如何获得输出 这将是实际的树 您不能使用 ExecWait 来做到这一点 您必须使用以下插件之一 nsExec http nsis sourcef
  • 类似亚马逊的界面,用于选择产品尺寸和颜色(即单击一个小红色框来选择红色产品等)

    在我的在线商店中 我想实现一个像Amazon s https rads stackoverflow com amzn click com B000YVES0I用于选择产品尺寸和颜色 即 用户应该看到一堆小框 而不是不同尺寸 颜色的单选按钮
  • 如何在 Swift 中通知队列(GCD)

    我正在使用 GCD 来通知主线程 函数内有 2 个异步调用 My code func getWavesByMostRecent closure escaping Wave gt Void var waves Wave let dispatc
  • 优化 MySQL 中联接中的 OR

    我在 MySQL 中有一个相当复杂的查询 当其中一个连接使用 OR 完成时 查询速度会大大减慢 我怎样才能加快速度 相关的连接是 LEFT OUTER JOIN publications p ON p id virtual performa
  • 创建binder时,Spring Cloud config + 总线对配置服务器调用两次

    我使用 spring cloud config 和 spring cloud bus 创建了一个简单的项目 由于某种原因 配置客户端两次调用配置服务器 第一次发生在创建引导程序的上下文时 预期的行为是什么 但第二次发生在创建绑定器的上下文时
  • 有人可以解释这是如何工作的吗?

    我有这行代码 class ButtonPanel extends JPanel implements ActionListener public ButtonPanel yellowButton new JButton Yellow 它有效
  • 为什么 cout 使用 << 会产生正确的字符串输出,但使用 + 却不会? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 这显示没有输出 int x 10 cout lt lt Hello C x 但这确实显示了输出 int x 10 cout lt
  • 使用基本矩阵 opencv 确定相机运动

    我尝试使用 opencv 从基本矩阵确定相机运动 我目前正在使用光流来跟踪每个其他帧中的点的移动 基本矩阵是从基本矩阵和相机矩阵导出的 我的算法如下 1 使用良好的特征跟踪功能来检测帧中的特征点 2 跟踪接下来两帧或三帧的点 Lk光流 在此
  • NPM:如何运行安装后?

    只是一个简单的问题 在我的 node js 项目中 我如何只运行安装后脚本 而不运行安装之前 仅供参考 这是我的 package json name gestionclientjs dependencies repository devDe
  • 如何在创建过程中引用同一对象的属性? [复制]

    这个问题在这里已经有答案了 我正在尝试做类似的事情 o a foo 42 b o a 但这会返回一个错误 指出 o 未定义 我知道我以后可以做 o b o a 但我想知道在定义 o 的同时是否可以定义 b 现在这已经是古老的历史了 但我刚刚
  • 如何在 redshift 中将行连接并转置为列

    我有以下table1其独特的关键是type type age A 20 B 21 C 22 我有以下结果表 我想加入他们 type score A 10 A 20 A 30 B 40 B 50 以下转置形式 type age score s