返回

数据整理利器:PostgreSQL 中的行列转换 pivot_unpivot

见解分享

PostgreSQL 中的行列转换:pivot_unpivot

在数据处理领域,行列转换是一种常见且重要的技术,用于将数据从行格式转换为列格式或反之。在 PostgreSQL 中,可以使用 pivot_unpivot 函数轻松实现此转换。

理解行列转换

  • 行转列(pivot): 将数据从行格式转换为列格式。例如,将具有多个列的值的行转换为具有单一列键和多个值列的列。
  • 列转行(unpivot): 与行转列相反,将数据从列格式转换为行格式。例如,将具有多列键和值的列转换为具有单个值列和多个列键的行。

使用 pivot_unpivot 函数

PostgreSQL 中的 pivot_unpivot 函数具有两种模式:

  • 行转列(pivot):
SELECT * FROM pivot_table(
  input_table,
  row_keys,
  column_keys,
  values
);
  • 列转行(unpivot):
SELECT * FROM unpivot_table(
  input_table,
  column_keys,
  row_keys,
  values
);

示例:行转列

考虑以下示例表 sales:

customer_id product sales
1 Apple 100
2 Orange 200
3 Banana 300
1 Grape 400

要将此表转换为列格式,我们可以使用 pivot_table 函数:

SELECT * FROM pivot_table(
  sales,
  row_keys := 'customer_id',
  column_keys := 'product',
  values := 'sales'
);

输出:

customer_id Apple Orange Banana Grape
1 100 NULL NULL 400
2 NULL 200 NULL NULL
3 NULL NULL 300 NULL

示例:列转行

现在,考虑一个列格式的表 revenue:

year q1 q2 q3 q4
2023 100 200 300 400

要将其转换为行格式,我们可以使用 unpivot_table 函数:

SELECT * FROM unpivot_table(
  revenue,
  column_keys := ARRAY['q1', 'q2', 'q3', 'q4'],
  row_keys := 'year',
  values := 'revenue'
);

输出:

year quarter revenue
2023 q1 100
2023 q2 200
2023 q3 300
2023 q4 400

SEO 优化