MySQL 查询以生成多列的频率计数

MySQL query to generate frequency counts for multiple columns

我在 MySQL 中有一个 table,其中三列包含不同进程的持续时间:

A     B     C
--------------
1     3     5
1     6     3
4     7     6
2     4     3

我想查询所有 3 个处理时间的频率计数(这样我最终可以在直方图中比较它们),如下所示:

seconds     A     B     C
--------------------------
1           2     0     0
2           1     0     0
3           0     1     2
4           1     1     0
5           0     0     1
6           0     1     1
7           0     1     0

到目前为止,我想出的解决方案是制作三个单独的 table 来执行计数 (*),然后将它们合并,但我觉得必须有更简洁的方法。

您可以使用 union all 和聚合:

select
    sec,
    sum(tab = 'a') a,
    sum(tab = 'b') b,
    sum(tab = 'c') c
from (
    select 'a' tab, a sec from mytable
    union all select 'b', b from mytable
    union all select 'c', c from mytable
) t
group by sec
order by sec

Demo on DB Fiddle:

sec |  a |  b |  c
--: | -: | -: | -:
  1 |  2 |  0 |  0
  2 |  1 |  0 |  0
  3 |  0 |  1 |  2
  4 |  1 |  1 |  0
  5 |  0 |  0 |  1
  6 |  0 |  1 |  1
  7 |  0 |  1 |  0