Postgres 10 - 将分类列转换为存在缺席矩阵



我想创建一个新表,如下所示:

原始表:

site_id, site_period
1,       period_a
2,       period_b
2,       period_c
3,       period_d
4,       period_a
4,       period_b

所需表:

site_id, period_a, period_b, period_c, period_d
1,       1,        0,        0,        0
2,       0,        1,        1,        0
3,       0,        0,        0,        1
4,       1,        1,        0,        0

这可能是一个重复的问题,因为这是一个相对简单的问题,但我不知道用什么词汇来描述它以找到解决方案。我熟悉编码逻辑,但对sql查询不太熟悉。谢谢!

您可以使用

CREATE TABLE ... AS SELECT和条件聚合。

CREATE TABLE desiredtable
AS
SELECT site_id,
       count(CASE site_period
               WHEN 'period_a' THEN
                 1
             END) period_a,
       ...
       count(CASE site_period
               WHEN 'period_d' THEN
                 1
             END) period_d
       FROM originaltable
       GROUP BY site_id;

最新更新