当前位置: 首页 > 面试题库 >

Postgres-将行转置为列

邢杰
2023-03-14
问题内容

我有下表,该表为每个用户提供了多个电子邮件地址。

我需要将其展平为用户查询中的列。请根据创建日期为我提供“最新”的3个电子邮件地址。

user.name | user.id | email1          | email2           | email3**

Mary      | 123     | mary@gmail.com  | mary@yahoo.co.uk | mary@test.com

Joe       | 345     | joe@gmail.com   | [NULL]           | [NULL]

问题答案:

使用crosstab()tablefunc模块。

SELECT * FROM crosstab(
   $$SELECT user_id, user_name, rn, email_address
     FROM  (
        SELECT u.user_id, u.user_name, e.email_address
             , row_number() OVER (PARTITION BY u.user_id
                            ORDER BY e.creation_date DESC NULLS LAST) AS rn
        FROM   usr u
        LEFT   JOIN email_tbl e USING (user_id)
        ) sub
     WHERE  rn < 4
     ORDER  BY user_id
   $$
  , 'VALUES (1),(2),(3)'
   ) AS t (user_id int, user_name text, email1 text, email2 text, email3 text);


 类似资料:
  • 问题内容: 我正在尝试将行转置为列,但是没有找到任何好的答案。 这是我想要的示例: 输入表: 输出将是: 问题答案: 您需要枚举值以对其进行透视:

  • 问题内容: 我有这种形式的查询返回值(查询返回超过50列)。 对于行值。我希望将这些详细信息转换为列并采用以下形状: 问题答案: 在纯 SQL中 ,它将需要大量编码,因为您将不得不手动放置 范围, 因为值和范围之间根本没有关系。如果存在关系,则可以使用 CASE 表达式并 动态 构建范围。 在 Oracle数据库11g第1版 及更高版本中,可以使用 UNPIVOT 上面,根据您的情况,您需要用现有

  • 问题内容: 我有一张桌子: 我需要在Postgres中进行选择查询,其结果如下: 任何对链接到类似示例的帮助都将不胜感激。 问题答案: 单用加入一个表达这项工作:

  • 问题内容: 我想知道如何逆转置成: 那么,如何只考虑值> 0 来转置结果in中的列? 问题答案: MySQL没有UNPIVOT函数,但是您可以使用将列转换为行。 基本语法为: 对于您的情况,您声明需要动态列的解决方案。如果真是这样,那么您将需要使用准备好的语句来生成动态SQL: 参见带有演示的SQL Fiddle

  • 我有一个csv文件上传到一个S3桶,我拿起AWS胶水,然后使用雅典娜查询。CSV表的格式如下:

  • 问题内容: 在Postgres 9.3数据库中,我有一张表,其中一列包含JSON,如下面示例中所示的测试表所示。 JSON始终是一个包含可变数量哈希值的数组。每个哈希始终具有相同的键集。我正在尝试编写一个查询,该查询为JSON数组中的每个条目返回一行,并为每个哈希键和Things表中的ID设置列。我希望输出如下所示: 即,两行用于JSON数组中包含两项的条目。是否可以让Postgres做到这一点?