我有一张表格,如下所示。 ID2 和 Time 的每个不同值都需要选择在 (0,1,2,3,4) 中具有 ID3 的行。然后,我想在 5 列中显示“Val”,并用零填充空列。 (如果 ID3=0 则 col0=Val 如果 ID3=1 则 col1=Val,并且...)
ID1 ID2 ID3 Val Time
1 224 0 224 10
2 224 1 48 10
3 224 4 270 15
4 224 5 1000 27
5 225 0 231 10
6 225 1 400 10
7 225 0 100 20
换句话说,输出应如下所示(按 ID2、时间分组):
ID2 Time col0 col1 col2 col3 col4
224 10 224 48 0 0 0
224 15 0 0 0 0 270
225 10 231 400 0 0 0
225 20 100 0 0 0 0
注意:表有 50M 行。
最佳答案
select id2, time,
sum(case when id3 = 0 then val else 0 end) as col0,
sum(case when id3 = 1 then val else 0 end) as col1,
sum(case when id3 = 2 then val else 0 end) as col2,
sum(case when id3 = 3 then val else 0 end) as col3,
sum(case when id3 = 4 then val else 0 end) as col4
from your_table
group by id2, time
having sum(val) > 0
关于MySQL GROUP BY 列并显示不同列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39767137/