pgsql pivot
时间: 2023-06-21 14:13:45 浏览: 181
在 PostgreSQL 中,可以使用 crosstab 函数进行数据透视操作,实现类似于 Excel 中的数据透视表的功能。crosstab 函数需要使用 tablefunc 模块,因此需要先安装该模块。
假设有以下示例数据:
```sql
CREATE TABLE sales (
product text,
month text,
amount numeric
);
INSERT INTO sales VALUES
('A', 'January', 100),
('A', 'February', 200),
('A', 'March', 300),
('B', 'January', 150),
('B', 'February', 250),
('B', 'March', 350),
('C', 'January', 200),
('C', 'February', 300),
('C', 'March', 400);
```
要将上述数据透视为以下格式:
| Product | January | February | March |
| ------- | ------- | -------- | ----- |
| A | 100 | 200 | 300 |
| B | 150 | 250 | 350 |
| C | 200 | 300 | 400 |
可以使用以下查询语句:
```sql
SELECT *
FROM crosstab(
'SELECT product, month, amount FROM sales ORDER BY 1,2',
'SELECT DISTINCT month FROM sales ORDER BY 1'
) AS ct (product text, "January" numeric, "February" numeric, "March" numeric);
```
该查询语句中,第一个参数是用于查询原始数据的 SQL 语句,第二个参数是用于确定列名的 SQL 语句。在本例中,第二个参数返回了所有不同的月份,并按照字母顺序排序。
注意,crosstab 函数要求原始数据必须按照透视列和透视行进行排序,因此在查询语句中需要使用 ORDER BY 子句。
以上就是在 PostgreSQL 中进行数据透视的方法,也称为数据逆转(Pivot)。
阅读全文