2

我有下表:

user      category    number
1         A           8
1         B           6
2         A           1
2         C           9
3         B           5

我想“展开”或“虚拟化”类别列并用“数字”列填充它们以获得:

user      cat_A    cat_B    cat_C
1         8        6        0
2         1        0        9
3         0        5        0

是否有可能在 SQL (Impala) 中实现这一点?

我发现了这个问题如何在 Google BigQuery 中为数千个类别创建虚拟变量列?

然而,它似乎有点复杂,我宁愿在 Pandas 中做。

知道我有10 个类别(A、B、C、D 等),有没有更简单的解决方案?

4

1 回答 1

3

您可以尝试使用条件聚合函数。

SELECT user,
        SUM(CASE WHEN category = 'A' THEN number ELSE 0 END) cat_A,  
        SUM(CASE WHEN category = 'B' THEN number ELSE 0 END) cat_B,  
        SUM(CASE WHEN category = 'C' THEN number ELSE 0 END) cat_C     
FROM T 
GROUP BY user      
于 2018-12-20T15:52:24.400 回答