【问题标题】:postgres 10 - convert categorical column to presence absence matrixpostgres 10 - 将分类列转换为存在缺席矩阵
【发布时间】:2019-10-17 23:14:30
【问题描述】:

我想像这样创建一个新表:

原表:

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 查询不太熟悉。谢谢!

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您可以使用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;
    

    【讨论】:

    • 您好,谢谢,这个解决方案在对逗号和分号等进行了一些摆弄之后工作。一件事,如果我不想使用 count() 函数,我该怎么做?在许多情况下,表中 site_id = 1 的 period_a 有倍数,因为多个来源报告 site_id = 1 属于周期 a。在上面代码的输出矩阵中,如果报告的 3 个源 site_id = 1 属于 period_a,则结果值为 3,我希望它为 1
    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多