Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL按列分组,并在不同列中显示值_Mysql_Group By - Fatal编程技术网

MySQL按列分组,并在不同列中显示值

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值为零的行,效果会更好。另外,我想知道如何优化此查询以降低时间复杂性。您是对的,

我有一张如下的桌子。ID2的每个不同值都需要它,选择ID3位于(0,1,2,3,4)中的行需要时间。然后,我想在5列中显示“Val”,并用零填充空列。 (如果ID3=0,则col0=Val 如果ID3=1,则col1=Val,并且……)

换句话说,输出应如下所示(按ID2分组,时间):


注:表中有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