如何使用MySQL查询发布情况

问题描述

我正在寻找使用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中可用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...