MySQL计数和行到列转换仅涉及一个表

我有一个名为历史的表来记录用户的活动,它由user_id、branch_id和duration组成。

该表如下所示

+++++++++++++++++++++++++++++++++++
id | user_id | branch_id | totHours
+++++++++++++++++++++++++++++++++++
|1 |   100   |     1     |    1   |
|2 |   199   |     1     |    1   |
|3 |   121   |     1     |    1   |
|4 |   140   |     1     |    1   |
|5 |   103   |     2     |    3   |
|6 |   107   |     2     |    1   |
|7 |   299   |     1     |    2   |
|8 |   209   |     2     |    2   |
|9 |   119   |     1     |    5   |

我想要产生这样的输出:

+++++++++++++++++++++++++++
Hours | Branch A | Branch B
+++++++++++++++++++++++++++
|1    |    4    |     1   |
|2    |    1    |     1   |
|3    |    0    |     1   |
|4    |    0    |     0   |
|5    |    1    |     0   |

我尝试使用这个查询来创建它,但是当我仅在totHours列上使用group by时,它返回错误,因为我需要在group by中包括branch_id。

下面是我的问题:

select totHours as Hours,
   coalesce(case when branch_id = 1 then count(totHours) else 0 end) as 'Branch A',
   coalesce(case when branch_id = 2 then count(totHours) else 0 end) as 'Branch B'
from histories
group by totHours, branch_id;

如果totHours不在表中(例如,在此表4中),它将为两个分支列显示0。

这是我的db fiddle

更新: MySQL版本5.7.22

谢谢

转载请注明出处:http://www.qxdxgs.com/article/20230526/2297401.html