如何为 SQLite 中范围内的每个整数创建列?

How to create column for every single integer within a range in SQLite?

这是我 table 的一些示例数据:

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

我需要所有 day_number 值,从 1 到最大值 (day_number),并且我希望 daily_users_count 为零,如果它没有在这个 table.

它应该看起来像这样:

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

我认为左连接 table 有一个数字列,所有整数从 1 到 max(day_number) 如果我为 [=24= 设置默认值] 作为 0.

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

您可以使用递归 CTE 来实现,它将 return 所有 day_number 包括丢失的 day_number 然后 LEFT 连接到 table:

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                 |