【发布时间】:2019-01-12 20:36:41
【问题描述】:
我有一张如下表:
| user_id | product_purchased |
-------------------------------
| 111 | A |
| 111 | B |
| 222 | B |
| 222 | B |
| 333 | C |
| 444 | A |
我想对表格进行透视,以将用户 ID 作为行,并将用户购买的每种产品的计数作为列。 所以对于上表,这看起来像:
| user_id | product A | product B | product C |
-----------------------------------------------
| 111 | 1 | 1 | 0 |
| 222 | 0 | 2 | 0 |
| 333 | 0 | 0 | 1 |
| 444 | 1 | 0 | 0 |
我知道这可以使用 countif 语句手动完成:
#standardsql
select user_id,
countif(product_purchased = 'A') as 'A',
countif(product_purchased = 'B') as 'B',
etc,
group by user_id
但是,实际上该表有太多可能的产品,因此手动写出所有选项是可行的。有没有办法以更自动化和更优雅的方式进行这种旋转?
【问题讨论】:
-
你可以把结果放到数组中,不知道能不能满足你的需求。
-
嘿 Gordon,我基本上需要一种方法来创建上面的第二个表,其中包含任意数量的列,具体取决于第一个表中有多少产品,但无需为每个人手动编写逻辑产品。
标签: sql google-bigquery