当前位置: 首页 > 知识库问答 >
问题:

在presto中将行扩展为列

鲁永福
2023-03-14

有没有办法在presto中有效地将行扩展为列?

我尝试用“where team=1”和“where team=2”分别过滤原始数据集,首先相应地获得dataset1和DataSet2,然后在income_level上连接这两个数据集。然而,当income_level有太多不同的值时,这是不方便的。有没有什么高效的方法可以得到我想要的结果?

共有1个答案

姚烨
2023-03-14

Prestodb提供了一个map_agg函数,可以帮助将长数据转换为您需要的宽格式。不幸的是,似乎没有一种方法可以动态地创建列名,但是这种方法应该比加入每个团队更有效(并且更少键入:))。

WITH raw_data AS (
  SELECT 1 AS team, 'a' AS income_level, 1 AS time, 11 AS ord
  UNION
  SELECT 1 AS team, 'b' AS income_level, 2 AS time, 12 AS ord
  UNION
  SELECT 1 AS team, 'c' AS income_level, 3 AS time, 13 AS ord
  UNION
  SELECT 2 AS team, 'a' AS income_level, 4 AS time, 14 AS ord
  UNION
  SELECT 2 AS team, 'b' AS income_level, 5 AS time, 15 AS ord
  UNION
  SELECT 2 AS team, 'c' AS income_level, 6 AS time, 16 AS ord
  UNION
  SELECT 3 AS team, 'a' AS income_level, 7 AS time, 17 AS ord
  UNION
  SELECT 3 AS team, 'b' AS income_level, 8 AS time, 18 AS ord
  UNION
  SELECT 3 AS team, 'c' AS income_level, 9 AS time, 19 AS ord
)

SELECT
  income_level,
  team_time[1] AS time_1,
  team_ord[1] AS ord_1,
  team_time[2] AS time_2,
  team_ord[2] AS ord_2,
  team_time[3] AS time_3,
  team_ord[3] AS ord_3
FROM (
  SELECT
    income_level,
    map_agg(team, time) AS team_time,
    map_agg(team, ord) AS team_ord
  FROM raw_data
  GROUP BY income_level
);

输出:

| income_level | time_1 | ord_1 | time_2 | ord_2 | time_3 | ord_3 |
|--------------|--------|-------|--------|-------|--------|-------|
| a            | 1      | 11    | 4      | 14    | 7      | 17    |
| b            | 2      | 12    | 5      | 15    | 8      | 18    |
| c            | 3      | 13    | 6      | 16    | 9      | 19    |

这个网站提供了另一个例子,说明如何做到这一点。

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

  • 问题内容: 如果我有这样的话: 给出以下结构: 如何将其扩展到以下内容? 问题答案: 您可以用来遍历每一行,并使用列表推导将数据重塑为所需的形式: 产量 ivakar的解决方案,是最快的: 这是用于上述基准测试的设置:

  • 问题内容: 我有一个SQL选择如下: 实际中 在这个 更复杂的选择中。是字符串(varchar)。如何扩展该sql以从中选择行, 就像 文本来自(而不是完全等于)? 问题答案: 如果您在表2的文本列中有通配符表达式,则可以这样做。 否则,您需要在查询中添加。

  • 问题内容: 我有一个表,我试图根据第二列的值将每一行分成一个或多个行。像这样: 我将其编写为SQL Server 2008中的sproc。我最好的解决方案是使用游标并向临时表中为表中的每一行添加[pcs]行数。似乎必须有一个比我所缺少的解决方案更简单的解决方案。谢谢。 问题答案: 您可以使用递归CTE: 这是一个演示供您尝试。

  • Szenario:我有两个扩展,它们用一些特定字段扩展了。在TYPO3 9之前,我必须使用以下打字脚本配置对新闻扩展的依赖关系进行配置: 模型扩展了基本扩展的模型: 在TYPO3 10中,在(中断:#87623): 只要您只有一个扩展新闻扩展名的扩展名,它就可以工作多久。如果您有第二个扩展并启用TYPO3缓存,您将得到一个错误,即在第一个扩展中添加的字段在新闻扩展的模板中不可用。奇怪的是,这个问题

  • 我在presto上有一个表,它有多个记录的记录。在该记录中,我使用了这个简单的SQL查询,