MySQL GROUP BY 列并显示不同列中的值

标签 mysql group-by

我有一张表格,如下所示。 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/

相关文章:

mysql - 迭代日期 Mysql 循环

除非使用 group by,否则 mySQL 计数只返回一个结果

mysql - 为什么没有聚合的结尾 Group By 会减慢我的查询速度?

mysql - 查找从出版商那里借书的人

Python和sqlite-检查表中的注册日期是否超过指定时间

java - JDBC mysql 连接在 Win8 上比 Ubuntu14 慢得多

mysql - SQL 选择上个月的数据

LIMIT(3) 行的 MySQL SUM 与 GROUP BY

MySQL 分组依据与另一列的排序/优先级

group-by - 聚合 Dask 数据帧并生成聚合数据帧