如何为 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 |
这是我 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 |