问题描述
我正在寻找使用MySQL查询频率分布的方法。我有一个表,其中有记录日期和另一个事件发生的列。理想的输出是一个表格,其中具有按升序排列的事件计数值及其对应的频率。
表
--------------------
|dates | event_count|
---------------------
|03/02 | 4 |
|03/03 | 3 |
|03/04 | 5 |
|03/05 | 2 |
|03/06 | 2 |
|03/06 | 5 |
---------------------
结果表
------------------------
|event_count | frequency|
------------------------
|0 |0 |
|1 |0 |
|2 |2 |
|3 |1 |
|4 |1 |
|5 |2 |
-------------------------
任何建议都值得赞赏!谢谢。
解决方法
您只想聚合吗?
select event_count,count(*) frequency
from mytable
group by event_count
另一方面,如果您想要所有可能的event_count
的行,即使它们没有出现在表中,也有些不同。一种方法是使用递归查询来生成值,然后用left join
带到表:
with recursive cte as (
select 0 event_count,max(event_count) max_event_count from mytable
union all
select event_count + 1 from cte where event_count < max_event_count
)
select c.event_count,count(t.event_count) frequency
from cte c
left join mytable t on t.event_count = c.event_count
group by c.event_count
递归查询仅在MySQL 8.0中可用。