MySQL按列分组,并在不同列中显示值
我有一张如下的桌子。ID2的每个不同值都需要它,选择ID3位于(0,1,2,3,4)中的行需要时间。然后,我想在5列中显示“Val”,并用零填充空列。 (如果ID3=0,则col0=Val 如果ID3=1,则col1=Val,并且……) 换句话说,输出应如下所示(按ID2分组,时间):MySQL按列分组,并在不同列中显示值,mysql,group-by,Mysql,Group By,我有一张如下的桌子。ID2的每个不同值都需要它,选择ID3位于(0,1,2,3,4)中的行需要时间。然后,我想在5列中显示“Val”,并用零填充空列。 (如果ID3=0,则col0=Val 如果ID3=1,则col1=Val,并且……) 换句话说,输出应如下所示(按ID2分组,时间): 注:表中有50M行 多谢各位。我认为在'then'之后,'id3'应该替换为'Val'。如果我们设置一个条件,删除col0到col4值为零的行,效果会更好。另外,我想知道如何优化此查询以降低时间复杂性。您是对的,
注:表中有50M行 多谢各位。我认为在'then'之后,'id3'应该替换为'Val'。如果我们设置一个条件,删除col0到col4值为零的行,效果会更好。另外,我想知道如何优化此查询以降低时间复杂性。您是对的,我将
id3
更改为val
。我还添加了一个having
子句来删除那些0
结果。谢谢。我认为在'then'之后,'id3'应该替换为'Val'。如果我们设置一个条件,删除col0到col4值为零的行,效果会更好。另外,我想知道如何优化此查询以降低时间复杂性。您是对的,我将id3
更改为val
。我还添加了一个having
子句来删除那些0
结果。
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
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
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