【问题标题】:How to create column for every single integer within a range in SQLite?如何为 SQLite 范围内的每个整数创建列?
【发布时间】:2020-12-18 01:48:16
【问题描述】:

这是我表中的一些示例数据:

day_number  daily_users_count
1           1
3           1
6           1
7           1
9           2
10          2

我需要从 1 到 max(day_number) 的所有 day_number 值,如果此表中未提及,我希望 daily_users_count 为零。

它应该看起来像这样:

day_number  daily_users_count
1           1
2           0
3           1
4           0
5           0
6           1
7           1
8           0
9           2
10          2

我认为,如果我将 daily_users_count 的默认值设置为 0,则左联接与一个表的列有一个从 1 到 max(day_number) 的所有整数的列。

我不明白如何创建这样一个表,其中存在一定范围内的所有整数。任何替代解决方案或任何方法将不胜感激。

【问题讨论】:

    标签: sql database sqlite better-sqlite3


    【解决方案1】:

    您可以使用递归 CTE 来实现,这将返回所有 day_numbers,包括丢失的 LEFT 加入到表中:

    with cte as (
      select min(day_number) day_number from tablename
      union all
      select day_number + 1 from cte
      where day_number < (select max(day_number) from tablename)
    )  
    select c.day_number, 
           coalesce(t.daily_users_count, 0) daily_users_count
    from cte c left join tablename t
    on t.day_number = c.day_number
    

    请参阅demo
    结果:

    | day_number | daily_users_count |
    | ---------- | ----------------- |
    | 1          | 1                 |
    | 2          | 0                 |
    | 3          | 1                 |
    | 4          | 0                 |
    | 5          | 0                 |
    | 6          | 1                 |
    | 7          | 1                 |
    | 8          | 0                 |
    | 9          | 2                 |
    | 10         | 2                 |
    

    【讨论】:

    • 谢谢。抱歉,我晚了 4 个月。 sql 对我来说有点难。
    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    相关资源
    最近更新 更多