【问题标题】:Create histogram given start and end values in SQL在 SQL 中创建给定开始和结束值的直方图
【发布时间】:2021-04-22 20:01:46
【问题描述】:

我有一个带有“start”和“end”列的 SQL 表:为了简单起见,我们假设它们是 1 到 10 之间的整数。我想以某种方式获得“start”和“end”之间的值的直方图“结束”。

例如,给定以下行:

start end
3 8
4 9

我想得到以下直方图:

time count
1 0
2 0
3 1
4 2
5 2
6 2
7 2
8 2
9 1
10 0

我真的不知道从哪里开始查看 SQL 语法以获得该结果——也许是内部连接?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果您没有方便的计数表或数字表,您可以使用递归 CTE 生成时间。然后加入并聚合:

    with recursive cte as (
          select 1 as t
          union all
          select t + 1
          from cte
          where t < 10
         )
    select cte.t,
           (select count(*)
            from t
            where cte.t between t.start and t.end
           ) as cnt
    from cte;
    

    Here 是一个 dbfiddle。

    【讨论】: