postgresql pivot
时间: 2023-06-23 09:55:47 浏览: 284
pivotmytable:PivotMyTable 是一个 PLPython PosgreSQL 函数,用于轻松构建数据透视表,为 PostgreSQL 扩展 tablefunc 中的交叉表函数生成正确的代码以使其工作
5星 · 资源好评率100%
PostgreSQL中的数据透视可以使用crosstab函数来实现。crosstab函数需要使用tablefunc扩展,这个扩展包含了一些可以用于表格翻转操作的函数。以下是一个使用crosstab函数进行数据透视的例子:
假设我们有一个表格,其中包含了一些学生的成绩信息:
```
CREATE TABLE student_scores (
student_id INTEGER,
subject TEXT,
score INTEGER
);
INSERT INTO student_scores VALUES
(1, 'Math', 80),
(1, 'Science', 75),
(1, 'History', 90),
(2, 'Math', 70),
(2, 'Science', 85),
(2, 'History', 92),
(3, 'Math', 90),
(3, 'Science', 80),
(3, 'History', 88);
```
现在我们想要将这个表格透视,将每个学生的成绩转化为一行,其中每个科目对应一个列。我们可以使用以下查询语句:
```
SELECT *
FROM crosstab(
'SELECT student_id, subject, score
FROM student_scores
ORDER BY 1,2',
'SELECT DISTINCT subject
FROM student_scores
ORDER BY 1'
) AS ct(student_id INTEGER, math INTEGER, science INTEGER, history INTEGER);
```
在这个查询语句中,第一个参数是用于生成透视表格的查询语句,第二个参数是用于指定列名的查询语句。我们可以看到,透视表格中的每一行对应一个学生,每个科目对应一个列。运行以上查询语句,可以得到以下结果:
```
student_id | math | science | history
------------+------+---------+---------
1 | 80 | 75 | 90
2 | 70 | 85 | 92
3 | 90 | 80 | 88
```
这个结果是将原始表格透视后得到的。每个学生对应一行,每个科目对应一列,而每个单元格中的值是该学生在该科目中的成绩。
阅读全文