[英]Presto SQL - Fill in missing values within range with 0
這是初始表:
id range val
1 -4. 2
1 -2. 1
1. 1. 1
1 3. 2
1 4. 1
2. -1. 1
2. 0. 1
2. 1. 1
更新表:
id range val
1 -4. 2
1. -3. 0
1 -2. 1
1. -1. 0
1. 0. 0
1. 1. 1
1. 2. 0
1 3. 2
1 4. 1
2. -1. 1
2. 0. 1
2. 1. 1
2. 2. 0
2 3. 0
2 4. 0
期望的邏輯:
id
都會有一些范圍。id
,范圍的下限將不同,但上限將是整個表中的最大值。我不是 SQL wiz,所以我有點迷路了。 任何幫助將非常感激。 讓我知道是否對邏輯感到困惑。
如果對於每個范圍值,您至少有一個值,那么我認為您想要:
select i.id, t.range, coalesce(t.value, 0) as value
from (select distinct id from t) i cross join
(select distinct range from t where range > 0) r left join
t
on t.id = i.id and t.range = r.range
union all
select id, range, value
from t
where range <= 0;
這是如何運作的? 第一個子查詢生成 id 和范圍值的所有組合,其中范圍值大於 0。它使用不同id
和range
值的笛卡爾積來執行此操作。
然后LEFT JOIN
會引入現有數據。 最后的子查詢帶來了碎屑——小於 0 的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.