返回
数据整理利器:PostgreSQL 中的行列转换 pivot_unpivot
见解分享
2023-09-27 07:08:38
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 优化