postgresql中的数据透视表

Posted

技术标签:

【中文标题】postgresql中的数据透视表【英文标题】:pivoting table in postgresql 【发布时间】:2018-06-28 20:20:34 【问题描述】:

我有什么

customerid   status

   Ax         1    
   Bx         3
   Cx         5
   Dx         4
   Ex         2

我希望在表格上方旋转。

我需要什么

customerid   status_1 status_2 status_3 status_4 status_5

   Ax         1         0         0        0        0
   Bx         0         0         1        0        0
   Cx         0         0         0        0        1
   Dx         0         0         0        1        0
   Ex         0         1         0        0        0

【问题讨论】:

【参考方案1】:
select customerid, 
    case when status = 1 then 1 else 0 end as status_1,
    case when status = 2 then 1 else 0 end as status_2,
    case when status = 3 then 1 else 0 end as status_3,
    case when status = 4 then 1 else 0 end as status_4,
    case when status = 5 then 1 else 0 end as status_5
from your_table
order by customerid;

【讨论】:

【参考方案2】:

在 Postgres 中使用 tablefunc module

postgres=# create extension tablefunc ;
CREATE EXTENSION
postgres=#  create table your_table (customerid char(2),status int);
insert into your_table values('Ax',1),('Bx',3),('Cx',5),('Dx',4),('Ex',2);
CREATE TABLE
INSERT 0 5
postgres=# SELECT * FROM crosstab(
  $$select customerid, status,
    count(status) AS "# of status" 
    from your_table group by customerid, status
             order by customerid,status$$ , 
  $$select distinct status from your_table
    order by status$$)
AS ("customerid" text, 
    "status_1" text, "status_2" text, "status_3" text, 
    "status_4" text, "status_5" text);
 customerid | status_1 | status_2 | status_3 | status_4 | status_5 
------------+----------+----------+----------+----------+----------
 Ax         | 1        |          |          |          | 
 Bx         |          |          | 1        |          | 
 Cx         |          |          |          |          | 1
 Dx         |          |          |          | 1        | 
 Ex         |          | 1        |          |          | 
(5 rows)
postgres=# 

【讨论】:

以上是关于postgresql中的数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql 如何在 SQL 数据库上透视表

怎样设置PostgreSQL中字段和表名对大小写敏感

使用 Redshift (PostgreSQL) 和计数的数据透视表

PostgreSQL 交叉表/数据透视问题

使用 PostgreSQL 创建数据透视表

在 PostgreSQL 中透视表