【发布时间】:2015-03-14 21:57:43
【问题描述】:
我有一个如下所示的数据集:
id | test_id
---+--------
1 | a
1 | b
1 | u
2 | a
2 | u
3 | a
3 | b
3 | u
并且我想将它汇总到一个新表中,这样test_id 是列名(以及 id),并且行是 1 或 0,具体取决于是否对该 id 进行了测试,像这样
id | a | b | u
---+---+---+--
1 | 1 | 1 | 1
2 | 1 | 0 | 1
3 | 1 | 1 | 1
Postgres 中有没有一种方法可以像这样重新排列表格?
【问题讨论】:
-
test_id中不同项目的数量是固定的还是还有其他项目? -
test_id项目已修复。实际上有大约30个测试项目。但是每个id可能没有30个关联test_ids -
如果一个 id 没有关联的 test_id 他们会在我的答案中得到 0。
-
是的。谢谢你,效果很好。有没有办法计算它们?事实证明,对于给定的客户,一些 test_ids 重复。这意味着客户已经对特定的
test_id进行了两次测试。如果为零,则加一。如果一个,再添加一个(2),等等。 -
如果您想计算客户参加每个测试的次数,只需将
max()更改为sum()。这将为未参加考试的人分配 0 和 N(参加考试的次数)。请参阅此示例:sqlfiddle.com/#!15/59c3f/1
标签: postgresql pivot crosstab data-analysis