我有一张像
这样的表格Id | Name | Num
----------------
#1 | a | 3
#1 | b | 4
#2 | a | 1
#2 | e | 2
并希望将其重组为
| a | b | e
---------------
#1 | 3 | 4 |
#2 | 1 | | 2
我实际上可以在python中使用pandas库来实现它,但是当数据集很大时它非常慢。 我想知道是否可以在SQL中完成。
答案 0 :(得分:2)
这称为旋转。通用方法使用条件聚合:
select id,
max(case when name = 'a' then num end) as a,
max(case when name = 'b' then num end) as b,
max(case when name = 'e' then num end) as e
from t
group by id;
这假定您需要三个额外的列,并且您知道名称。如果您想要name
中任何值的列,那么您需要构造动态SQL。如果你按照上面的模板,通过在表中查询列中的值,在Python中构建这样的查询可能并不困难。