In SQLite how to fill in null for missing numbers from a range of 1-10 when using Group By
? I have a table called DataTest
:
DataID | theData |
---|---|
1 | 50 |
2 | 38 |
2 | 48 |
4 | 38 |
5 | 48 |
8 | 39 |
9 | 50 |
9 | 60 |
10 | 90 |
If I do SELECT theData FROM DataTest GROUP BY dataID;
I receive :
theData |
---|
50 |
48 |
38 |
48 |
39 |
60 |
90 |
How to alter the query to produce rows 3, 6 and 7 as below which were originally missing?
theData |
---|
50 |
48 |
null |
38 |
48 |
null |
null |
39 |
60 |
90 |
CodePudding user response:
One option uses a recursive query to enumerate all numbers between the lower and upper bound of the table, then computes the aggregates:
with recursive ids (id, maxid) as (
select min(dataid), max(dataid) from mytable
union all
select id 1, maxid from ids where id < maxid
)
select i.id, max(t.thedata) max_data
from ids i
left join mytable t on t.dataid = i.id
group by i.id