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
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
我在 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
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