首页 > 解决方案 > MySQL查询为多列生成频率计数

问题描述

我在 MySQL 中有一个表,其中三列保存不同进程的持续时间:

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

到目前为止,我想出的解决方案是创建三个单独的表来执行 count(*) 然后合并它们,但我觉得必须有一个更清洁的方法。

标签: mysqlsqlfrequency-distribution

解决方案


您可以使用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

DB Fiddle 上的演示

秒 | 一个 | 乙 | 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

推荐阅读